Использование объекта с именами свойств, таких как "0"
и "1"
, действительно подозрительно.Я бы просто продолжал использовать массив, который вы можете легко создать с помощью map
(но продолжайте читать для опций объектов, не являющихся массивами):
var result = arr.items.map(formatItems);
Live Пример:
function convertData() {
var arr = {"items": [ {"type": "color"}, {"type": "number" }]};
var result = arr.items.map(formatItems);
console.log(result);
}
function formatItems(item, index) {
return {
type: "string",
id: "item-"+index
};
}
convertData();
Но если вам действительно нужен объект не из массива, ваш код довольно близок, если вы действительно хотите использовать reduce
;см. комментарии:
var result = arr.items.reduce(function(obj, item, index) {
// ^^^-- receive the "accumulator" as the first param
obj[index] = formatItems(item); // Create the property on the object
return obj; // Return the same object
}, {}); // Start with a blank object
Live Пример:
function convertData() {
var arr = {"items": [ {"type": "color"}, {"type": "number" }]};
var result = arr.items.reduce(function(obj, item, index) {
// ^^^-- receive the "accumulator" as the first param
obj[index] = formatItems(item); // Create the property on the object
return obj; // Return the same object
}, {}); // Start with a blank object
console.log(result);
}
function formatItems(item, index) {
return {
type: "string",
id: "item-"+index
};
}
convertData();
Но , когда вы просто передаете тот же объект из обратного вызова, который вы получаете, reduce
isn 'т лучший инструмент.Все, что вам нужно, это простой цикл:
var result = {};
for (const [index, item] of arr.items.entries()) {
result[index] = formatItems(item);
}
Live Пример:
function convertData() {
var arr = {"items": [ {"type": "color"}, {"type": "number" }]};
var result = {};
for (const [index, item] of arr.items.entries()) {
result[index] = formatItems(item);
}
console.log(result);
}
function formatItems(item, index) {
return {
type: "string",
id: "item-"+index
};
}
convertData();
Adiga имеет намного более простой вариант ES2015 + , хотя.
Или, если вам нужноверсия до ES2015:
var result = {};
for (int index = 0; index < arr.items.length; ++index) {
result[index] = formatItems(arr.items[index]);
}
Live Пример:
function convertData() {
var arr = {"items": [ {"type": "color"}, {"type": "number" }]};
var result = {};
for (var index = 0; index < arr.items.length; ++index) {
result[index] = formatItems(arr.items[index]);
}
console.log(result);
}
function formatItems(item, index) {
return {
type: "string",
id: "item-"+index
};
}
convertData();