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

var data = {
      food:"chicken", 
      list:[
             { name: "wings", qty: "25", price: "4,900", payment:"Cash" },
             { name: "lap", qty: "50", price: "9,900", payment: "Credit" }
           ]
      }

Я получил эти данные выше от ajax через отношения модели php laravel, и я хотел бы использовать javascript или любую библиотеку для преобразования данных в формате ниже.

Данные ниже - это то, что нужно.

var data = [
    { food:"chicken", name: "wings", qty:"25", price:"4,900", payment:"Cash" },
    { food:"chicken", name: "lap", qty:"50", price:"9,900", payment:"Credit" }        
]   

Ответы [ 3 ]

0 голосов
/ 30 сентября 2018

Вы можете легко решить эту проблему, перебирая каждый элемент и добавляя к этому объекту объект питания, следующим образом:

data.list.forEach((oneItem) => {
     oneItem.food = data.food;
});
data = data.list; //keep the array of list objects only
0 голосов
/ 30 сентября 2018

Один из способов сделать это без lodash и только с ES6 - через map и Object.assign:

var data = { food: "chicken", list: [{ name: "wings", qty: "25", price: "4,900", payment: "Cash" }, { name: "lap", qty: "50", price: "9,900", payment: "Credit" } ] }

var result = data.list.map(x => Object.assign(x, {food: data.food}))
console.log(result)

С lodash/fp это выглядит так:

var result = _.flow(_.map(_.extend({ food: data.food })))(data.list)

In lodash:

var result = _.map(data.list, x => _.extend(x, {food: data.food}))
0 голосов
/ 30 сентября 2018

Этот код функции getList может вам помочь:

let getList = function(data, arrayKey, arrayName) {
 data[arrayKey].forEach(function(element) {
   element[arrayName] = data[arrayName]
 }); return data[arrayKey];
};

Здесь вы можете увидеть пример работающей выше функции:

const data = {
  food: "chicken",
  list: [{
      name: "wings",
      qty: "25",
      price: "4,900",
      payment: "Cash"
    },
    {
      name: "lap",
      qty: "50",
      price: "9,900",
      payment: "Credit"
    }
  ]
};

let getList = function(data, arrayKey, arrayName) {
 data[arrayKey].forEach(function(element) {
   element[arrayName] = data[arrayName]
 }); return data[arrayKey];
};

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