簡體   English   中英

使用lodash將對象內部的數組展平

[英]Flatten an array inside an array of objects using lodash

我有一個這樣的Array

[
    {
        name: "A",
        job: ["1", "2"]
    },
    {
        name: "B",
        job: ["2"]
    },
    {
        name: "C",
        job: []
    }
]

我如何使用lodash將其扁平化為類似的內容。

[
    {
        name: "A",
        job: ["1"]
    },
    {
        name: "A",
        job: ["2"]
    },
    {
        name: "B",
        job: ["2"]
    },
    {
        name: "C",
        job: []
    }
]

我想到的唯一解決方案是遞歸迭代。

謝謝。

如果您的對象不是多層,則不需要使用遞歸。

相反,您可以無需lodash和遞歸即可實現此目的。 您可以使用.flatMap獲取每個job數組,然后使用.map為該job數組中的每個項目創建一個單獨的對象。

請參見下面的示例:

 const arr = [{name: "A", job: ["1", "2"]}, {name: "B", job: ["2"]}, {name: "C", job: []}]; const spreadArrObj = arr => { return arr.flatMap(({name, job}) => { if(job.length < 2) return {name, job}; // if the object is empty or has one one object then return the object return job.map(elem => ({ // map each element in the job array to its own object name, job: [elem] })); }); } console.log(spreadArrObj(arr)); 

在此處查看.flatMap瀏覽器兼容性。

 let arr = [{ name: "A", job: ["1", "2"] }, { name: "B", job: ["2"] }, { name: "C", job: [] } ]; let newArr = []; for (i = 0; i < arr.length; i++) { var job = arr[i].job if (job.length > 0) { for (j = 0; j < job.length; j++) { obj = {}; obj.name = arr[i].name; obj.job = [job[j]]; newArr.push(obj); } } else { obj = {}; obj.name = arr[i].name; obj.job = []; newArr.push(obj); } } console.log(newArr); 

您可以使用數組reduce並檢查job數組的長度。 如果大於1,則迭代作業數組並創建一個新對象,並將其推送到累加器

 let data = [{ name: "A", job: ["1", "2"] }, { name: "B", job: ["2"] }, { name: "C", job: [] } ] let newData = data.reduce(function(acc, curr) { if (curr.job.length > 1) { curr.job.forEach(function(item) { acc.push({ name: curr.name, job: [item] }) }) } else { acc.push(curr) } return acc; }, []); console.log(newData) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM