2016-09-07 37 views
2

感谢您在这里看看。我正在使用API​​,并且需要更改数据的格式。这里的返回数据的一个例子:JavaScript数组操作 - 是否有更多的声明式方法?

data: [ 
    { 
    status: "planned work", 
    name: "123" 
    }, 
    { 
    status: "all good", 
    name: "nqr" 
    } 
]; 

每列车线路有像“123”或“NQR”的名称,我想每列车分裂成自己的对象,这样它看起来是这样的:

data: [ 
    { 
    status: "planned work", 
    name: "1" 
    }, 
    { 
    status: "planned work", 
    name: "2" 
    }, 
    { 
    status: "planned work", 
    name: "3" 
    }, 
    { 
    status: "all good", 
    name: "n" 
    }, 
    { 
    status: "all good", 
    name: "q" 
    }, 
    { 
    status: "all good", 
    name: "r" 
    } 
]; 

我有一个分裂的名称和使用嵌套循环.forEach推项目到一个数组一些工作代码。工作代码:

function formatLinesData(lines) { 
    var trains = []; 
    lines.forEach(line => { 
    line.name.split("").forEach(train => { 
     trains.push({name: train, status: line.status}); 
    }); 
    }); 
    return trains; 
} 

有没有办法做到这一点没有嵌套循环?寻找一个优雅的解决方案,如果你有一个。

感谢

回答

2

您可能会这样做;

var data = [ 
 
    { 
 
    status: "planned work", 
 
    name: "123" 
 
    }, 
 
    { 
 
    status: "all good", 
 
    name: "nqr" 
 
    } 
 
], 
 

 
newData = [].concat(...data.map(o => o.name.split("").map(c => ({status: o.status, name: c})))); 
 
console.log(newData);

2

可以使用减少 - 一个空数组初始化,然后用你的逻辑遍历数据 阵列。

data.reduce((prev,curr) => { 
    for (let i=0; i<curr.name.length; i++) { 
     prev.push({ name : curr.name[i], status : curr.status}); 
    } 
    return prev; 
},[]); 
相关问题