ここで奇妙なシナリオですが、私はそれに遭遇しました。
このシナリオ用のオブジェクトの配列が2つactions
あり、と言うことができますlines
。
内部には、actions
次のようにフォーマットされたオブジェクトがあります。
{
id: 'randomGeneratedId1',
text: 'Click here',
url: 'stackoverflow.com'
}
lines
私の中には:
{
id: 'randomGeneratedId2',
text: 'Line 1'
}
最後に、これらの順序を格納する別の配列があります...これを elementOrder
[
{ id: 'randomGeneratedId1', order: 1 },
{ id: 'randomGeneratedId2', order: 2 }
]
基本的に、elementOrder
上記で参照したように、lines
とactions
配列の両方を調べて、この最終的な配列内でそれらを順番に並べたいので、要素データとIDのリストを含む配列の結果が得られます。それらが入っている順序。
このようになっている理由はclass.line('Line 1').action('Click here', 'stackoverflow.com').line(...).action(...).action(...)
、チェーンを無制限にしたいというメソッドがありますが、そもそも両方を異なるオブジェクトに含める必要があるためです。
私はこれが可能であることを知っていて、それをマッピングしようとしましたが、頭を包むことができないようです!
elementOrder
基づいて配列を並べ替えるorder
elementOrder
配列をループします。actions
andlines
配列を検索して一致するものを見つけ、finalArray
これに基づいて構築します。コード-
var actions = [
{
id: 'randomGeneratedId1',
text: 'Click here',
url: 'stackoverflow.com'
}]
var lines = [
{
id: 'randomGeneratedId2',
text: 'Line 1'
}
]
var elementOrder = [
{ id: 'randomGeneratedId2', order: 2 },
{ id: 'randomGeneratedId1', order: 1 }
]
// this is where you build the final array
var finalArray = elementOrder.sort((a, b) => a.order - b.order).map(ele => {
var action = actions.find(action => ele.id === action.id);
if (action) {
return action;
}
var line = lines.find(line => ele.id === line.id);
if (line) {
return line;
}
return ele;
});
console.log(JSON.stringify(finalArray));
// [{"id":"randomGeneratedId1","text":"Click here","url":"stackoverflow.com"},{"id":"randomGeneratedId2","text":"Line 1"}]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加