繁体   English   中英

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

[英]can I use forEach to make every element of an array a new object?

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

myArray = [c1, c2, c3...]

现在我想将每个元素变成一个对象并分配不同的键值:

c1 = {image = path, value = number)

我试图运行forEach()但找不到正确的方法,但未能成功找到答案。

我的猜测是:

myArray.forEach(function() {
  let name = {
    image = path,
    value = number,
  }
  return name;
});

但日志中的元素没有变化。

任何可以帮助我的问题的帮助或链接。 第一次在这里编码。

更新:一个更简单的解决方案是,当我首先创建带有循环的数组时,.push对象的所有键和值。

array.push({image:pathx,value:numberx})

可以 ,但最好使用简单的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};
});

从理论上讲,您可以推送到新数组,但这 Array#map 的确切用例 Array#map将旧值映射到新值 回调返回的对象是新对象,返回的数组是包含新对象的新数组。

从语义上讲, Array#forEach明确地遍历数组中的每个元素,并可能执行一些有副作用的事情(可能包括推入另一个数组)。 但是使用Array#map ,它专门用于将旧的数组值转换为新的值。 使用专门设计的代码,因为它可以向其他阅读您的代码的人传达清晰的信息。

const newArray = myArray.map(({ path, number }) => ({
  image: path,
  value: number
}));

Array#map将旧值映射到新值。 您可能需要使用以下功能而不是箭头功能,因为IE中不支持它。 我只是在对象中添加了伪数据,您可以更改它。

myArray = ["c1", "c2", "c3"]
myArray = myArray.map(function(elem) {
    return {"image":"path"+elem,"value":"value"+elem};
});
console.log(myArray);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM