2016-09-07 4 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; 
},[]); 
関連する問題