gpt4 book ai didi

javascript - 基于另一个数组对数组进行排序/过滤

转载 作者:行者123 更新时间:2023-11-30 16:13:47 24 4
gpt4 key购买 nike

我刚刚在这里发布了一个问题 (Sorting/Filtering from 2 arrays) 但我遇到了一个问题,因为我的 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)(map/filter/sort),而不是 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>');

关于javascript - 基于另一个数组对数组进行排序/过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35823468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com