【问题标题】:merge nested array of object with parent object将嵌套的对象数组与父对象合并
【发布时间】:2018-09-30 12:03:51
【问题描述】:

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

我通过 php laravel 模型关系从 ajax 收到上述数据,我想使用 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" }        
]   

【问题讨论】:

标签: javascript underscore.js lodash


【解决方案1】:

不使用 lodash 而仅使用 ES6 的一种方法是通过 mapObject.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)

lodash

var result = _.map(data.list, x => _.extend(x, {food: data.food}))

【讨论】:

    【解决方案2】:

    getList-function 的这段代码可能会对您有所帮助:

    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);

    【讨论】:

      【解决方案3】:

      您可以通过迭代每个项目并将食物对象添加到该对象来轻松解决它,如下所示:

      data.list.forEach((oneItem) => {
           oneItem.food = data.food;
      });
      data = data.list; //keep the array of list objects only
      

      【讨论】:

        猜你喜欢
        • 2021-11-17
        • 1970-01-01
        • 2014-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-13
        • 2023-01-25
        • 1970-01-01
        相关资源
        最近更新 更多