我使用循环创建了一个包含许多元素的数组:
myArray = [c1, c2, c3...]
现在我想将每个元素组成一个对象并分配不同的键值:
c1 = {image = path, value = number)
我试图运行forEach()
,但无法弄清楚这样做的正确方法,而且我没有成功找到答案。
我的猜测是:
myArray.forEach(function() {
let name = {
image = path,
value = number,
}
return name;
});
但是日志中的元素没有变化。
任何可以帮助我的答案的帮助或链接。这是第一次编码。
更新:一个更简单的解决方案是:当我首先使用循环创建数组时,推送对象的所有键和值。
array.push({image:pathx,value:numberx})
答案 0 :(得分:2)
你可以,但你最好使用一个简单的for
循环:
for (let i = 0; i < myArray.length; ++i) {
let entry = myArray[i];
myArray[i] = {image: entry.path, value: entry.number};
}
或使用map
制作新数组。
newArray = myArray.map(entry => ({image: entry.path, value: entry.number}));
或者如果您更喜欢非箭头功能:
newArray = myArray.map(function(entry) {
return {image: entry.path, value: entry.number};
});
答案 1 :(得分:1)
理论上你可以推送到一个新数组,但这个是Array#map
的确切用例。 Array#map
将旧值映射到新值。回调中返回的对象是新对象,返回的数组是包含新对象的新数组。
从语义上讲,Array#forEach
是明确迭代数组中的每个元素,并且可能执行带有副作用的东西(可能包括推送到另一个数组)。但是对于Array#map
,它专门用于将旧数组值转换为新数组值。使用专门设计的那个,因为它向读取您代码的任何人传达了明确的信息。
const newArray = myArray.map(({ path, number }) => ({
image: path,
value: number
}));
答案 2 :(得分:0)
Array#map将旧值映射到新值。您可能需要使用以下箭头函数,因为IE不支持它。 我只是在对象中添加了虚拟数据,你可以改变它。
myArray = ["c1", "c2", "c3"]
myArray = myArray.map(function(elem) {
return {"image":"path"+elem,"value":"value"+elem};
});
console.log(myArray);