создать массив с новыми объектами - PullRequest
0 голосов
/ 29 апреля 2018

Я хотел бы создать новые объекты из значений "value1", "value2" и "value3"

 myArray = [{fruit: "apple", value1: 3, value2:2, value1 :1}] 

Я бы хотел получить результат

myNewArray = [ {fruit: "apple", item: "value1"},{fruit: "apple", item: "value1"},{fruit: "apple", item: "value1"},{fruit: "apple", item: "value2"},{fruit: "apple", item: "value2"},{fruit: "apple", item: "value3"}] 

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Попробуйте код ниже:

var myArray = [{fruit: "apple", value1: 3, value2:2, value3 :1}] 

var myNewArray = []
function insertItem (ct, itemName, fruit) {
    var itemArr = [];
    for(var i=0;i< ct;i++){
        var newItem = {fruit};
        newItem['item'] = itemName;
        itemArr.push(newItem);
    }
    return itemArr;
}
myArray.forEach(function (obj) {
    myNewArray.push(...insertItem(obj.value1, 'value1', obj.fruit));
    myNewArray.push(...insertItem(obj.value2, 'value2', obj.fruit));
    myNewArray.push(...insertItem(obj.value3, 'value3', obj.fruit));
})

console.log(myNewArray);
0 голосов
/ 29 апреля 2018

Итерируйте внешний массив с Array.map(), используйте объект destruuring с остатком , чтобы отделить fruit от значений. Получите пары ключ / значение значений с помощью Object.entries() и итерируйте их с помощью Array.map(). Для каждого значения используйте Array.from(), чтобы сгенерировать новый массив объектов со значением в качестве длины и ключом в качестве item. Распределить в Array.concat(), чтобы сгладить подмассивы, генерируемые при каждом использовании Array.map:

const myArray = [{fruit: "apple", value1: 3, value2:2, value3 :1}];

const result = [].concat(...myArray.map(({ fruit, ...values }) => 
  [].concat(...Object.entries(values)
    .map(([item, length]) => Array.from({ length }, () => ({
      fruit,
      item
    })))
)));

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...