繁体   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