javascript设置对象数组中的所有值

Mis*_*cha 9 javascript arrays

关于类似问题的两部分问题.我有2个不同的阵列,

数组1:

 array1 = [{
     name : "users",
     checked : true
   }, {
     name : "active users",
     checked : false
   }, {
     name : "completions",
     checked : false
   }]
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种简单的方法可以立即将所有选中的值设置为true.我知道这可以用for循环:

  for (var i = 0 ; i < array.length ; i++) {
    array[i].checked = false
  }
Run Code Online (Sandbox Code Playgroud)

即使这不是很多代码我只是好奇如果有一种方法可以做到这一点而不迭代数组中的每个对象.(不确定这是否可行,或者这是否有任何不同,所以如果我错了,请纠正我).

数组2:

array2 = [{
     value1 : false,
     value2 : true,
     value3 : false,
     value4 : false, 
     value5 : false,   
   }]
Run Code Online (Sandbox Code Playgroud)

是否可以一次性将所有值设置为true或false(同样我可以使用for循环,但不希望如此)

(我使用角度和lodash,但未能找到'lodash'或'angular'解决方案,但任何解决方案都可以)

Gaz*_*ler 20

如果不循环遍历元素,则无法执行此操作,但是可以使用功能抽象而不是for:

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

array1.map(function(x) { 
  x.checked = true; 
  return x
});
Run Code Online (Sandbox Code Playgroud)

或使用_.map从lodash:

_.map(array1, function(x) { 
  x.checked = true; 
  return x
});
Run Code Online (Sandbox Code Playgroud)

对于数组2,您可以使用lodash中的_.mapValues.

_.mapValues(array2[0], function() {
  return true;
});
Run Code Online (Sandbox Code Playgroud)

您可以在https://github.com/lodash/lodash/blob/a1b15df6489f47498edda244552c9804e046a45d/lodash.js#L3125上看到lodash实现_.map使用while

  • 我相信.forEach更适合这种情况.除非有创建新对象数组的情况,否则.map会有效地执行.我知道这是一个旧线程,但有人可能会发现我的贡献很有用 (3认同)
  • 无论如何循环正在迭代? (2认同)

sum*_*mit 16

您可以使用 es6 fat arrow 并制作一个班轮,但它仍然涉及迭代。

array1.map(a=>a.checked=true);
Run Code Online (Sandbox Code Playgroud)

array1.map(a=>a.checked=true);
Run Code Online (Sandbox Code Playgroud)


Fou*_*rat 9

即使这不是很多代码我只是好奇如果有一种方法可以做到这一点而不迭代数组中的每个对象.(不确定这是否可行,或者这是否有任何不同,所以如果我错了,请纠正我).

是否可以一次性将所有值设置为true或false(同样我可以使用for循环,但不希望如此)

不!没有访问每个城镇,你不能访问所有城镇.有像jQuery $.each和lodash一样的快捷方式,_.map但它只是一个功能,它正在做你对for循环做的事情.