javascript设置对象

时间:2015-05-07 10:50:25

标签: javascript arrays

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

数组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循环,但不愿意)

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

4 个答案:

答案 0 :(得分:17)

如果不循环使用元素,则无法执行此操作,但是可以使用功能抽象而不是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;
});

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

答案 1 :(得分:9)

  

尽管这不是很多代码,但我只是好奇是否有办法在不迭代数组中的每个对象的情况下执行此操作。 (不确定这是否可行,或者这是否有任何不同,所以如果我错了,请纠正我)。

     

是否可以一次将所有值设置为true或false   (我可以使用for循环,但不愿意)

不,不!您无法访问所有城镇而无需访问每个城镇。 有像$.each这样的jQuery和像_.map这样的lodash的快捷方式,但它只是一个可以用for循环做的事情。

答案 2 :(得分:1)

如你在问题中提到的那样,如果没有迭代(循环)数组,就无法设置数组中每个对象的值。

答案 3 :(得分:1)

您可以使用es6 fat arrow并制作一个衬垫但仍然需要迭代。

a

array1.map(a=>a.checked=true);