【问题标题】:Javascript add same property to all objects in array [duplicate]Javascript向数组中的所有对象添加相同的属性[重复]
【发布时间】:2016-07-31 12:38:12
【问题描述】:

我在没有角或下划线的节点中工作,并且正在寻找一个有效的纯 JavaScript 答案(也许避免循环)。我有以下 JSON 对象数组:

object = [
    {account:2423, user:1564},
    {account:1235, user:1564}
]

我想在对象中的每个数组中添加以下内容:

username:"clientname" 

所以最后看起来是这样的:

object = [
    {account:2423, user:1564, username:"clientname"},
    {account:1235, user:1564, username:"clientname"}
]

这个问题要求避免循环。

【问题讨论】:

  • object.forEach((o) => { o.username = 'clientname'; }).
  • 有什么问题?它涉及两件事:迭代数组和分配属性。如果你不知道如何做这两个,那么你需要在提问之前阅读初学者材料。为什么要避免循环?
  • 谢谢马蒂。 Squint,我通常在 R 中编码,并且已经学会避免循环,因为它在该语言中效率低下。对 javascript 不熟悉,正在寻找自己的方式。
  • 感谢 alexi2,请注意我的问题要求避免循环。
  • 如果问题要求避免循环,您不应该接受您所做的答案。 .forEach() 方法最终只是循环和调用函数。如果有的话,它可能会更慢。如果要避免循环,可以使用递归,发现不会有任何性能提升。

标签: javascript arrays json node.js


【解决方案1】:

使用Array#forEach 遍历元素并设置username 属性。

var object = [{
  account: 2423,
  user: 1564
}, {
  account: 1235,
  user: 1564
}];

object.forEach(function(v) {
  v.username = 'clientname';
})

console.log(object);

即使你可以使用简单的for loop

var object = [{
  account: 2423,
  user: 1564
}, {
  account: 1235,
  user: 1564
}];

for (var i = 0; i < object.length; i++) {
  object[i].username = 'clientname';
}

console.log(object);

仅供参考:如果没有循环,它可能会更加复杂和低效。如果元素数量有限,那么您可以使用其索引更新它,尽管可以使用 @squint 建议的递归,但我认为这里不需要所有这些,因为它是一个简单循环的工作。

【讨论】:

  • 我相信 for 循环执行速度最快。
【解决方案2】:

您可以使用Array.map 方法获取结果。这是代码

var object = [
    {account:2423, user:1564},
    {account:1235, user:1564}
];

object.map(function(entry) {
    entry.username = "clientname";
    return entry;
});

【讨论】:

  • Bikas,你是说 array.map 比 forEach 或 for 循环效率更高还是更低?
  • @JasonA:为什么?这是一些随机的家伙的博客,并且正在做出虚假的声明。在我的测试中,.map() 速度较慢,而且您仍然无法避免像您的问题状态那样的循环。
  • map 在这里不合适,这种工作应该使用forEach
  • @BikasVaibhav:map 从现有数组生成一个新数组。通常,使用map 时应避免副作用。要将具有副作用的函数应用于数组,可以使用 forEach
  • @BikasVaibhav:它专门用于从现有阵列构建新阵列。你为什么要使用一种方法来构建一个你将要丢弃的新数组?使它看起来像您的代码中有错误。如果我遇到这种情况,我会问为什么没有保留数组。
猜你喜欢
  • 2016-08-09
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 2011-11-09
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多