JavaScript设置对象数组中所有值

30

关于类似问题的两个部分问题。我有2个不同的数组,

数组 1:

 array1 = [{
     name : "users",
     checked : true
   }, {
     name : "active users",
     checked : false
   }, {
     name : "completions",
     checked : false
   }]

我想知道是否有一种简单的方法可以同时将所有选中的值设置为true。我知道可以用for循环实现:

  for (var i = 0 ; i < array.length ; i++) {
    array[i].checked = false
  }

尽管这并不是很多代码,但我只是好奇是否有一种方法可以在不遍历数组中的每个对象的情况下完成此操作。(不确定这是否可能或者这是否有任何区别,所以如果我有任何错误,请纠正我)。

数组2:

array2 = [{
     value1 : false,
     value2 : true,
     value3 : false,
     value4 : false, 
     value5 : false,   
   }]

是否有一种方法可以一次性将所有值设置为true或false(我可以使用for循环,但不想这么做)

(我正在使用Angular和Lodash,但是还没有找到“Lodash”或“Angular”的解决方案,但任何解决方案都可以)


array2只有一个元素:一个具有五个属性的对象。如果它是一个值数组或属性数组,并且使用ES6可以接受,那么您可以使用Array.prototype.fill() - Kenigmatic
4个回答

38

如果没有遍历元素,你无法完成此操作,但是有一些功能性抽象可以代替使用 for

对于数组1,您可以使用 map

array1.map(function(x) { 
  x.checked = true; 
  return x
});

或者使用 lodash 的 _.map

_.map(array1, function(x) { 
  x.checked = true; 
  return x
});

对于数组 2,你可以使用 Lodash 的 _.mapValues
_.mapValues(array2[0], function() {
  return true;
});

你可以看到lodash使用while实现了_.map,具体代码请见https://github.com/lodash/lodash/blob/a1b15df6489f47498edda244552c9804e046a45d/lodash.js#L3125


@RayonDabre 是的,逃脱是不可能的。 - axelduch
7
我认为在这种情况下,使用.forEach更合适。除非需要创建一个新的对象数组,那么.map会有效地执行此操作。我知道这是一个旧帖子,但有人可能会发现我的贡献有用。 - Nerman
我可以在普通对象中使用map吗? - akshay kishore

25
你可以使用ES6的箭头函数来简化代码,但这仍然涉及到迭代。
array1.map(a=>a.checked=true);

array1 = [{
     name : "users",
     checked : true
   }, {
     name : "active users",
     checked : false
   }, {
     name : "completions",
     checked : false
   }]
   array1.map(a=>a.checked=true);
   console.log(array1);


在编程中,使用 .map() 而不使用其返回值是一种反模式。这种情况下应该简单地使用 .forEach() - Ivar

10
即使这不是很多代码,但我很好奇是否有一种方法可以在不迭代数组中的每个对象的情况下完成此操作。(不确定这是否可能或者是否有任何区别,所以如果我有任何错误,请纠正我)。 可能使用jQuery的$.each和lodash的_.map等快捷方式,但它们只是执行与for循环相同的操作的函数。
不!你不能在没有访问它们每一个的情况下参观所有城镇。 可以使用jQuery的$.each和lodash的_.map等快捷方式,但它们只是执行与for循环相同的操作的函数。

1

如果要设置数组中每个对象的值,则需要像您在问题中提到的那样遍历(循环)整个数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接