2016-01-13 2 views
2

У меня есть массив объектов:преобразование массивов объектов в различные объекты

[{ bags:10, pouch:small, weight:100, quantity:1 }, 
{ bags:101, pouch:large, weight:1001, quantity:11 }] 

Как я могу отделить этот массив на несколько объектов показан ниже?

small = { bags:10,weight:100,quantity:1 } 
large = { bags:101,weight:1001,quantity:11 } 
+0

Я думаю, что [Array.reduce] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce) - путь сюда. – A1rPun

+1

@ A1rPun: Нет, если вы создаете несколько выходов. –

+0

Где вы застряли? Вы просто находите запись для «маленького», создаете объект, копируете в него соответствующие реквизиты и делаете то же самое для «большого». –

ответ

1

Так шаги:

  1. Найти запись, которую вы хотите, и

  2. Создание объекта для пакета

  3. Скопируйте недвижимость, которую вы хотите

Итак:

var array = [{ bags:10,pouch:"small",weight:100,quantity:1},{bags:101,pouch:"large",weight:1001,quantity:11}]; 
 
var small = get(array, "small"); 
 
var large = get(array, "large"); 
 
snippet.log("small = " + JSON.stringify(small)); 
 
snippet.log("large = " + JSON.stringify(large)); 
 

 
function get(array, pouch) { 
 
    // Find the entry (on newer browsers you could use Array#find, and it 
 
    // can be shimmed; I used Array#some here) 
 
    var found; 
 
    array.some(function(entry) { 
 
    if (entry.pouch == pouch) { 
 
     found = entry; 
 
     return true; 
 
    } 
 
    }); 
 
    if (found) { 
 
    // Found it, create an object with the properties we want 
 
    return { 
 
     bags: found.bags, 
 
     weight: found.weight, 
 
     quantity: found.quantity 
 
    }; 
 
    } 
 
    return null; 
 
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

+0

Спасибо за помощь! @ T.J.Crowder Если содержимое внутри объекта неизвестно, как я могу перебирать все значения внутри объекта, а затем отделить его? – HarshMakadia

+0

@HarshMakadia: См. Ответ Нины о создании объекта со свойствами для каждого мешка. –

3

Это делается, но я не рекомендую!

var data = [{ bags: 10, pouch: 'small', weight: 100, quantity: 1 }, { bags: 101, pouch: 'large', weight: 1001, quantity: 11 }], 
 
    object = data.forEach(function (a) { 
 
     window[a.pouch] = { bags: a.bags, weight: a.weight, quantity: a.quantity }; 
 
    }); 
 

 
document.write('<pre>' + JSON.stringify(small, 0, 4) + '</pre>'); 
 
document.write('<pre>' + JSON.stringify(large, 0, 4) + '</pre>');

Лучшее решение с объектом

Вы можете сначала создать объект с pouch значений, как собственность и назначить их позже пожелавшие переменные.

var data = [{ bags: 10, pouch: 'small', weight: 100, quantity: 1 }, { bags: 101, pouch: 'large', weight: 1001, quantity: 11 }], 
 
    object = data.reduce(function (r, a) { 
 
     r[a.pouch] = { bags: a.bags, weight: a.weight, quantity: a.quantity }; 
 
     return r; 
 
    }, {}); 
 

 
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>'); 
 

 
var small = object.small, 
 
    large = object.large; 
 

 
document.write('<pre>' + JSON.stringify(small, 0, 4) + '</pre>'); 
 
document.write('<pre>' + JSON.stringify(large, 0, 4) + '</pre>');

+0

@NinaScholz Что делать, если содержимое внутри объекта динамически генерируется, как его получить? – HarshMakadia

+0

@HarshMakadia, я предлагаю использовать объект и сохранять все значения вместе. –

+1

@HarshMakadia: В этой ситуации, как говорит Нина, объект (или на современных двигателях «Карта», если это необходимо), чтобы организовать их, - это правильный путь. –

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