2015-02-11 4 views
0

Я хочу создать массив для активных элементов и неактивных элементов в моем списке. В настоящее время у меня есть код ниже. Приведенный ниже код работает, но я хочу, чтобы формат был таким же, как и существующий массив.нажимать существующий массив на несколько массивов js

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

Есть ли способ, которым я могу нажать весь объект, не назвав его?

ответ

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); 
} 
+0

Кроме того, если вы собираетесь использовать функцию: 'var active = getData ('active');' и 'var inactive = getData()' –

0

Если я понимаю вас правильно, все, что вам нужно сделать, это active.push(myData[i]), чтобы нажать ссылку в массив и сделать то же самое для inactive.

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]); 
      } 
    } 
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); 
Смежные вопросы