#javascript #arrays #loops #object
#javascript #массивы #циклы #объект
Вопрос:
Мне нужно перебрать два массива строк и установить их в качестве свойств объекта. Оба массива имеют одинаковую длину.
Я пробовал перебирать один массив, но ничего не могу найти о переборе двух массивов одновременно и установке их в качестве свойств в объекте.
Пример:
var propertyName = ["a", "b", "c", "d"];
var propertyValue = ["1", "2", "3", "4"];
var = {};
Ожидаемый результат:
obj = [
{propertyName: "a", propertyValue: "1"},
{propertyName: "b", propertyValue: "2"},
{propertyName: "c", propertyValue: "3"},
{propertyName: "d", propertyValue: "4"},
];
(Обновление для того, что я пробовал)
Это то, что я пробовал до сих пор, но не смог понять, как добраться до второго массива. Спасибо всем, кто так быстро ответил.
for (var in propertyName) {
obj.propertyName = propertyName[i].toString();
System.log(JSON.stringify(obj));
}
Спасибо!
Комментарии:
1. Поделитесь кодом, который вы до сих пор перебирали через один. Будет полезно просмотреть код, который вы пробовали, а затем помочь вам получить желаемые результаты.
2. Как эти массивы заполняются в первую очередь? если вы хотите сохранить их как единый объект (пары ключ, значение), я не понимаю, почему вы должны хранить их в двух отдельных массивах. Я бы посоветовал вам начать с того места, где эти массивы заполняются
Ответ №1:
Вы можете использовать функцию array.map():
let propertyName = ["a", "b", "c", "d"];
let propertyValue = ["1", "2", "3", "4"];
let obj = propertyName.map((name, index) => ({propertyName: name, propertyValue: propertyValue[index]}))
console.log(obj)
Ответ №2:
Вы можете использовать map и создать объект с желаемыми значениями
var propertyName = ["a", "b", "c", "d"];
var propertyValue = ["1", "2", "3", "4"];
let op = propertyName.map((e,i)=> ({
propertyName: e,
propertyValue: propertyValue[i]
}))
console.log(op)
Ответ №3:
если вы точно знаете, что индекс каждого массива совпадает с индексом другого массива в их определенном порядке, тогда вы можете просто использовать их в том же цикле, как это…
var obj = [];
for(var i = 0; i < propertyName.length; i ) {
obj.push({
propertyName: propertyName[i],
propertyValue: propertyValue[i]
});
}
Ответ №4:
Вы могли бы взять краткие свойства и сопоставить все значения с одним и тем же индексным объектом.
Это работает для произвольного количества свойств, при условии, что длина массива одинакова.
var propertyName = ["a", "b", "c", "d"],
propertyValue = ["1", "2", "3", "4"],
result = Object
.entries({ propertyName, propertyValue })
.reduce((r, [k, a]) => a.map((v, i) => Object.assign(r[i] || {}, { [k]: v })), []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }