将现有数组推入多个数组js

时间:2015-02-11 02:08:15

标签: javascript html arrays

我想在列表中为活动项和非活动项创建一个数组。我目前有以下代码。以下代码可行,但我希望格式与现有数组相同。

  var myData = [
    {"text" : "item 1", "id":11111,  "active" : 0 },
    {"text" : "item 2", "id":22222,  "active" : 1 },
    {"text" : "item 3", "id":33333,  "active" : 1 },
    {"text" : "item 4", "id":44444,  "active" : 0 }  
  ];
  console.log(myData[0].text); //returns item 1
  var active = [];
  var inactive = [];
  for (var i = 0; i < myData.length; i++) {
          if(myData[i].active) {
              active.push({
                items: myData[i];
              });
          }
          else {
              inactive.push({
                items: myData[i];
              });
          }
  }
  console.log(active[0].items.text);  //returns item 2
  console.log(inactive[0].items.text); //returns item 1

我似乎无法弄清楚如何在不命名的情况下将整个对象推入数组。

我想设置我的数组,以便我可以使用console.log

活性[0]的.text

而不是必须进入下一个级别并继续

活性[0] .items.text

有没有办法在没有命名的情况下推动整个对象?

4 个答案:

答案 0 :(得分:1)

var myData = [
    {"text" : "item 1", "id":11111,  "active" : 0 },
    {"text" : "item 2", "id":22222,  "active" : 1 },
    {"text" : "item 3", "id":33333,  "active" : 1 },
    {"text" : "item 4", "id":44444,  "active" : 0 }  
];

var active = [];
var inactive = [];
for (var i in myData){
    var item = myData[i];
    if (item.active){
        active.push(item);
    }else{
        inactive.push(item);
    }
}

console.log(active, inactive);

答案 1 :(得分:1)

 var myData = [
    {"text" : "item 1", "id":11111,  "active" : 0 },
    {"text" : "item 2", "id":22222,  "active" : 1 },
    {"text" : "item 3", "id":33333,  "active" : 1 },
    {"text" : "item 4", "id":44444,  "active" : 0 }  
  ];
  console.log(myData[0].text); //returns item 1

var active = myData.filter(function(data){
  return data.active;
});

var inactive = myData.filter(function(data){
  return !data.active;
});

或者也许让它成为一种功能

function getData(type){
  return myData.filter(function(data){
     return (type == 'active') ? data.active : !data.active;
  });
}

如果您已经在使用ES6箭头功能,可以将它们缩短为:

var active = myData.filter(data => data.active);
var inactive = myData.filter(data => !data.active);

function getData(type){
  return myData.filter(data => (type == 'active') ? data.active : !data.active);
}

答案 2 :(得分:0)

如果我理解正确,您需要做的就是active.push(myData[i])将引用推送到数组中并对inactive执行相同操作。

答案 3 :(得分:0)

不要推送包含活动/非活动对象的新对象,而只需按下现有对象。

  var active = [];
  var inactive = [];
  for (var i = 0; i < myData.length; i++) {
          if(myData[i].active) {
              active.push(myData[i]);
          } else {
              inactive.push(myData[i]);
          }
  }