簡體   English   中英

基於另一個數組對數組進行排序/過濾

[英]Sorting/Filtering on array based on another array

我剛剛在這里發布了一個問題( 從2個數組進行排序/過濾 ),但由於我的ID可能是隨機字符串,所以我遇到了一個問題:

所以我有一個包含所有數據的主數組:

var masterArray = [
        {'id' : 'wedfd', 'title' : 'Title 1'},
        {'id' : 'hji', 'title' : 'Title 2'},
        {'id' : 'sdfds', 'title' : 'Title 3'},
        {'id' : 'fgfgf', 'title' : 'Title 4'},
        {'id' : 'kkd', 'title' : 'Title 5'},
        {'id' : 'jjj', 'title' : 'Title 6'},
        {'id' : 'abc', 'title' : 'Title 7'}
    ];

我得到此信息的數組:

var sortFilterInfo = [
    {'id' : 'jjj', 'sortOrder' : 1},
    {'id' : 'hji', 'sortOrder' : 2},
    {'id' : 'abc', 'sortOrder' : 3}
]

有了這些信息,我需要一個數組,該數組為我提供此排序后的過濾后的數組:(我僅使用本機DOM數組方法(ES6)(映射/過濾器/排序)和NOT Jquery,lodash等。

var resultArray = [
    {'id' : 'jjj', 'title' : 'Title 6', 'sortOrder' : 1},
    {'id' : 'hji', 'title' : 'Title 2', 'sortOrder' : 2},
    {'id' : 'abc', 'title' : 'Title 7', 'sortOrder' : 3}
]

謝謝!

您可以使用map()find() (使用ES6箭頭符號)

 var masterArray = [{ 'id': 'wedfd', 'title': 'Title 1' }, { 'id': 'hji', 'title': 'Title 2' }, { 'id': 'sdfds', 'title': 'Title 3' }, { 'id': 'fgfgf', 'title': 'Title 4' }, { 'id': 'kkd', 'title': 'Title 5' }, { 'id': 'jjj', 'title': 'Title 6' }, { 'id': 'abc', 'title': 'Title 7' }]; var sortFilterInfo = [{ 'id': 'jjj', 'sortOrder': 1 }, { 'id': 'hji', 'sortOrder': 2 }, { 'id': 'abc', 'sortOrder': 3 }] // if `sortFilterInfo` is not sorted then sort it using sort() // sortFilterInfo.sort((a,b) => a.id-b.id) // iterate over `sortFilterInfo` array for generating sorted array var res = sortFilterInfo.map(v => { // get element from `masterArray` based on the id var obj = masterArray.find(v1 => v1.id == v.id); // add sortOrder to the object obj.sortOrder = v.sortOrder; // return updated object return obj; }); document.write('<pre>' + JSON.stringify(res, null, 3) + '</pre>'); 

或以下帶有id的數組,然后使用indexOf()獲取索引

 var masterArray = [{ 'id': 'wedfd', 'title': 'Title 1' }, { 'id': 'hji', 'title': 'Title 2' }, { 'id': 'sdfds', 'title': 'Title 3' }, { 'id': 'fgfgf', 'title': 'Title 4' }, { 'id': 'kkd', 'title': 'Title 5' }, { 'id': 'jjj', 'title': 'Title 6' }, { 'id': 'abc', 'title': 'Title 7' }]; var sortFilterInfo = [{ 'id': 'jjj', 'sortOrder': 1 }, { 'id': 'hji', 'sortOrder': 2 }, { 'id': 'abc', 'sortOrder': 3 }] // if `sortFilterInfo` is not sorted then sort it using sort() // sortFilterInfo.sort((a,b) => a.id-b.id) // create an array with all id var idArr=masterArray.map(v=>v.id); // iterate over `sortFilterInfo` array for generating sorted array var res = sortFilterInfo.map(v => { // get element from `masterArray` based on the id var obj = masterArray[idArr.indexOf(v.id)]; // add sortOrder to the object obj.sortOrder = v.sortOrder; // return updated object return obj; }); document.write('<pre>' + JSON.stringify(res, null, 3) + '</pre>'); 

這是一種蠻力方法。 如果sortFilterInfo正確,則此解決方案將始終有效。 基本上只檢查(從最低到最高的順序)它是否在masterArray中,如果是,則保證將其推入結果數組的正確位置。

var masterArray = [
  {'id' : 'wedfd', 'title' : 'Title 1'},
  {'id' : 'hji', 'title' : 'Title 2'},
  {'id' : 'sdfds', 'title' : 'Title 3'},
  {'id' : 'fgfgf', 'title' : 'Title 4'},
  {'id' : 'kkd', 'title' : 'Title 5'},
  {'id' : 'jjj', 'title' : 'Title 6'},
  {'id' : 'abc', 'title' : 'Title 7'}
];

var sortFilterInfo = [
  {'id' : 'jjj', 'sortOrder' : 1},
  {'id' : 'hji', 'sortOrder' : 2},
  {'id' : 'abc', 'sortOrder' : 3}
];

var resultArray = [];

for(var i = 0; i < sortFilterInfo.length; i++) {
  for(var j = 0; j < masterArray.length; j++) {
    if (sortFilterInfo[i].id === masterArray[j].id) {
      resultArray.push({id : masterArray[j].id, title: masterArray[j].title, sortOrder: sortFilterInfo[i].sortOrder});
    }
  }
}

暫無
暫無

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

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