2016-11-19 2 views
0

Массива Буквального с литерал объекта внутри Javascript

var insurance = [ 
 
    { 
 
    id: 'John', 
 
    policy: [ 
 
     {name: 'geico', cost: 400}, 
 
     {name: 'nationwide', cost: 500}, 
 
     {name: 'maine', cost: 550}, 
 
     {name: 'litty', cost: 450} 
 
    ] 
 
    }, 
 
    { 
 
    name: 'Chris', 
 
    policy: [ 
 
     {name: 'emran', cost: 400}, 
 
     {name: 'kite', cost: 500}, 
 
     {name: 'tile log', cost: 450}, 
 
     {name: 'seatle ins', cost: 600}, 
 
    ] 
 
} 
 
]; 
 
function loop() { 
 
\t var all; 
 
\t for (var i in insurance){ 
 
\t \t all.push(insurance[i].id + " " + insurance[i].policy[i].name + " " + insurance[i].policy[i].cost); 
 
\t } 
 
\t return all; 
 
} 
 
console.log(loop());

Я застрял пытаюсь получить доступ значений из свойств. Ответ должен быть как

John geico 400 
John nationwide 500 

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

console.log(insurance[0].id + " " + insurance[0].policy[0].name + " " + insurance[0].policy[0].cost); 
console.log(insurance[0].id + " " + insurance[0].policy[1].name + " " + insurance[0].policy[1].cost); 

ответ

0

Вы должны повторять внешний массив insurance массив, а внутренний policy массив. Вы можете конвертировать внешние объекты в массивы, используя вложенную Array.prototype.map(), а затем разгладить вложенные массивы в единый массив путем применения Array.prototype.concat():

function loop(arr) { 
 
    return [].concat.apply([], arr.map(function(item) { 
 
    return item.policy.map(function(policy) { 
 
     return item.id + " " + policy.name + " " + policy.cost; 
 
    }); 
 
    })); 
 
} 
 

 
var insurance = [ 
 
    { 
 
    id: 'John', 
 
    policy: [ 
 
     {name: 'geico', cost: 400}, 
 
     {name: 'nationwide', cost: 500}, 
 
     {name: 'maine', cost: 550}, 
 
     {name: 'litty', cost: 450} 
 
    ] 
 
    }, 
 
    { 
 
    id: 'Chris', 
 
    policy: [ 
 
     {name: 'emran', cost: 400}, 
 
     {name: 'kite', cost: 500}, 
 
     {name: 'tile log', cost: 450}, 
 
     {name: 'seatle ins', cost: 600}, 
 
    ] 
 
    } 
 
]; 
 

 
console.log(loop(insurance));

Или еще короче код, если вы используете функции стрелок ES6 , распространение массив, параметр деструктурирующий и шаблон строки:

const loop = (arr) => [].concat(...arr.map(({ id, policy }) => 
 
    policy.map(({ name, cost }) => `${id} ${name} ${cost}`) 
 
)); 
 

 
const insurance = [ 
 
    { 
 
    id: 'John', 
 
    policy: [ 
 
     {name: 'geico', cost: 400}, 
 
     {name: 'nationwide', cost: 500}, 
 
     {name: 'maine', cost: 550}, 
 
     {name: 'litty', cost: 450} 
 
    ] 
 
    }, 
 
    { 
 
    id: 'Chris', 
 
    policy: [ 
 
     {name: 'emran', cost: 400}, 
 
     {name: 'kite', cost: 500}, 
 
     {name: 'tile log', cost: 450}, 
 
     {name: 'seatle ins', cost: 600}, 
 
    ] 
 
    } 
 
]; 
 

 
console.log(loop(insurance));

0

Вы должны инициализировать all как массив.

var all = []; 
    //  ^^^^ 

Итерация политики также.

Вы можете вернуть результат с помощью внешнего Array#reduce и внутреннего Array#forEach.

var insurance = [{ id: 'John', policy: [{ name: 'geico', cost: 400 }, { name: 'nationwide', cost: 500 }, { name: 'maine', cost: 550 }, { name: 'litty', cost: 450 }] }, { name: 'Chris', policy: [{ name: 'emran', cost: 400 }, { name: 'kite', cost: 500 }, { name: 'tile log', cost: 450 }, { name: 'seatle ins', cost: 600 }] }]; 
 

 
function loop() { 
 
    return insurance.reduce(function (r, a) { 
 
     return r.concat(a.policy.map(function (b) { 
 
      return a.id + " " + b.name + " " + b.cost; 
 
     })); 
 
    }, []); 
 
} 
 

 
console.log(loop());

0

Попробуйте это.

insurance.forEach(function(item, index) { 
    Id = item.id; 
    item.policy.forEach(function(item1, index1) { 
    console.log(Id + " " + item1.name + " " + item1.cost) 
    }) 
}); 
0

Надеюсь, что это решение поможет :)!

var insurance = [ 
 
    { 
 
    id: 'John', 
 
    policy: [ 
 
     {name: 'geico', cost: 400}, 
 
     {name: 'nationwide', cost: 500}, 
 
     {name: 'maine', cost: 550}, 
 
     {name: 'litty', cost: 450} 
 
    ] 
 
    }, 
 
    { 
 
    name: 'Chris', 
 
    policy: [ 
 
     {name: 'emran', cost: 400}, 
 
     {name: 'kite', cost: 500}, 
 
     {name: 'tile log', cost: 450}, 
 
     {name: 'seatle ins', cost: 600}, 
 
    ] 
 
} 
 
]; 
 
function loop() { 
 
    
 
var info1; 
 
var into2; 
 
var all = [] 
 
for(var i in insurance){ 
 
    var user = insurance[0].id; 
 
    //console.log(user) 
 
    for(var j in insurance[0].policy){ 
 
     info1 = user + " "+ insurance[0].policy[0].name + " " + insurance[0].policy[0].cost; 
 
     info2 = user + " "+ insurance[0].policy[1].name + " " + insurance[0].policy[1].cost; 
 
    } 
 
} 
 
all.push(info1, info2); 
 

 
return all; 
 
} 
 

 
console.log(loop());

0

var insurance = [ 
 
    { 
 
    id: 'John', 
 
    policy: [ 
 
     {name: 'geico', cost: 400}, 
 
     {name: 'nationwide', cost: 500}, 
 
     {name: 'maine', cost: 550}, 
 
     {name: 'litty', cost: 450} 
 
    ] 
 
    }, 
 
    { 
 
    id: 'Chris', 
 
    policy: [ 
 
     {name: 'emran', cost: 400}, 
 
     {name: 'kite', cost: 500}, 
 
     {name: 'tile log', cost: 450}, 
 
     {name: 'seatle ins', cost: 600}, 
 
    ] 
 
} 
 
]; 
 

 
\t \t 
 
insurance.map(function(b){ 
 
    return b.policy.map(function(a){console.log(b.id,a.name,a.cost);}); 
 
    }); 
 

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