2016-03-14 3 views
1

у меня есть массив объектов, которые выглядят примерно так,перемещать массив объектов в массивы

[{ 
     name : Client 1, 
     total: 900, 
     value: 12000 
    }, { 
     name : Client 2, 
     total: 10, 
     value: 800 
    }, { 
     name : Client 3, 
     total: 5, 
     value : 0 
}] 

То, что я хотел, чтобы получить 3 массивы из этого, массив имени,

[Client 1, Client 2, Client 3]

и массив сумм,

[900, 10, 5]

и массив значений,

[12000, 800, 0]

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

ответ

2

Использование Array.prototype.map функция

var arr = [{ name: "Client 1", total: 900, value: 12000 }, { name: "Client 2", total: 10, value: 800 }, { name: "Client 3", total: 5, value: 0 }]; 
 

 
var totals = arr.map(e => e.total); 
 
var names = arr.map(e => e.name); 
 
var values = arr.map(e => e.value); 
 

 
document.write("<pre>" + totals + "</pre>"); 
 
document.write("<pre>" + names + "</pre>"); 
 
document.write("<pre>" + values + "</pre>");

Примечание от @Andy

Это ES6 так что вам может понадобиться transpiler, если ваши браузеры не поддерживают его еще.

+0

Почему 'Массив # map' а не 'Array.prototype.map'? –

+0

Я имею в виду, почему это '#' обозначение? –

+1

@ MatíasFidemraizer, его короткое письмо для прототипа, читайте здесь 'Array.prototype.map' –

0

Вы можете использовать объект с требуемыми ключами в качестве массивов.

var data = [{ name: 'Client 1', total: 900, value: 12000 }, { name: 'Client 2', total: 10, value: 800 }, { name: 'Client 3', total: 5, value: 0 }], 
 
    result = function (array) { 
 
     var r = {}; 
 
     array.forEach(function (a) { 
 
      Object.keys(a).forEach(function (k) { 
 
       r[k] = r[k] || []; 
 
       r[k].push(a[k]); 
 
      }); 
 
     }); 
 
     return r; 
 
    }(data); 
 
\t 
 
document.write('<pre>name: ' + JSON.stringify(result.name, 0, 4) + '</pre>'); 
 
document.write('<pre>total: ' + JSON.stringify(result.total, 0, 4) + '</pre>'); 
 
document.write('<pre>value: ' + JSON.stringify(result.value, 0, 4) + '</pre>'); 
 
document.write('<pre>the object: ' + JSON.stringify(result, 0, 4) + '</pre>');

0

если я uderstood вам право вам нужно создать 3 массивов от 1? Вы можете сделать somethink так:

var names=[]; 
var totals=[]; 
var values=[]; 

for(var i=0; i<objectArray.length; i++){ 
    names.push(objectArray[i].name); 
    totals.push(objectArray[i].total); 
    values.push(objectArray[i].value); 
} 
1

Если вы хорошо с объектом, проведение каждого из массивов, следующий Array.prototype.reduce будет работать:

var a = [{ 
     name : "Client 1", 
     total: 900, 
     value: 12000 
    }, { 
     name : "Client 2", 
     total: 10, 
     value: 800 
    }, { 
     name : "Client 3", 
     total: 5, 
     value : 0 
}]; 

var res = a.reduce(function(a,b){ 
    return { 
    name: a.name.concat(b.name), 
    total: a.total.concat(b.total), 
    value: a.value.concat(b.value) 
    } 
},{ 
    name: [], 
    total:[], 
    value:[] 
}) 

console.log(res) // Object {name: Array[3], total: Array[3], value: Array[3]} 
+0

Для меня это лучший ответ: P Reduce - это ответ на получение разных результатов из массива ... –

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