2016-01-26 3 views
1

У меня есть объект данных. Если я делаю console.log (данные), вот вывод.отделить массив объектов внутри объекта (Javascript)

Object {Info: Array[3]} 
    > Info: Array[3] 
    >[0]: Object 
      name: 'Alex' 
      sex: 'Male' 
      new_joinee: 0 
    >[1]: Object 
      name: 'Anna' 
      sex: 'female' 
      new_joinee: 1 
    >[2]: Object 
      name: 'lester' 
      sex: 'Male' 
      new_joinee: 1 

Теперь, если я хочу получить доступ к new_joinee, я должен ввести следующее.

data.Info[0].new_joinee 
data.Info[2].sex 

Всего несколько примеров, упомянутых здесь. Я хочу устранить это и вместо этого получить выход, просто набрав

Info[0].new_joinee 
Info[2].sex 

Может кто-нибудь дать мне знать, как я могу это достичь. (ответил alexander)

У меня есть еще один запрос на этот. Поскольку мы можем видеть, что new_joinee либо 0, либо 1. Я хочу, чтобы он был ложным для 0 и true для 1. Таким образом, новые данные должны быть следующими.

Info: Array[3] 
>[0]: Object 
     name: 'Alex' 
     sex: 'Male' 
     new_joinee: false 
>[1]: Object 
     name: 'Anna' 
     sex: 'female' 
     new_joinee: true 
>[2]: Object 
     name: 'lester' 
     sex: 'Male' 
     new_joinee: true 

Мне нужно динамически это делать. есть ли способ достичь этого?

+1

В javascript все объект, даже массивы и функции, прототипная модель делает его уникальным с других языков. Единственный способ, которым я могу думать о достижении того, что вы хотите, - это загрязнение глобального пространства имен ... что не очень хорошо. –

ответ

3

массивы Javascript является назначенного по ссылке. Так что, если вы просто объявить новую переменную и присвоить требуемое свойство

var info = data.Info; 

вуаля, вы получите ссылку на оригинальное свойство объекта, который можно использовать непосредственно.

console.log(info[2].name,'is',info[2].sex); 

Что касается второго вопроса, .map() ваш друг

var info=data.Info.map(function(element){ 
element.new_joinee=(element.new_joinee!=0); 
return element; 
}); 

Имейте в виду, что вы изменили семантику. Теперь info является копией массива, а не ссылкой. Несмотря на то, что объекты, которые он содержит, все еще ссылаются на исходные объекты.

вы могли бы сделать это вместо

var info = data.Info; 
    info.map(function(element){ 
    element.new_joinee=(element.new_joinee!=0); 
    return element; 
    }); 

в этом случае info и data.Info являются ссылки на тот же массив, копия, что .map() создает просто отбрасываются. Но, поскольку объекты являются ссылками на одни и те же объекты, изменения в свойствах объектов отражаются в исходном массиве.

+0

@ PA- спасибо. один последний запрос. как я могу изменить значение true в «true» в вашем методе? – Ayesha

3

Вы можете назначить свойство объекта к переменным (var Info = data.Info;)

var data = { 
 
    Info: [ 
 
    { name: 'Alex', sex: 'Male', new_joinee: 0 }, 
 
    { name: 'Anna', sex: 'female', new_joinee: 1 } 
 
    ] 
 
}; 
 

 
var Info = data.Info; 
 
console.log(Info[0].name); 
 
console.log(Info[0].new_joinee); 
 
console.log(Info[0].sex); 
 
console.log(Info[1].name); 
 
console.log(Info[1].new_joinee); 
 
console.log(Info[1].sex);

Смежные вопросы