我可以使用forEach使数组的每个元素成为一个新对象吗?

时间:2018-01-07 16:25:33

标签: javascript arrays object

我使用循环创建了一个包含许多元素的数组:

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})

3 个答案:

答案 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);