基于另一个数组对对象数组进行排序

时间:2017-06-19 16:39:50

标签: javascript

所以我想说我有一个数组:

const chunks = [
    {id: 0, names: ['app']}, 
    {id: 1, names: ['contact']}, 
    {id: 2, names: ['bootstrap']}
];

我希望它基于names属性进行排序,因此顺序就像在这个数组中一样:

const original = ['bootstrap', 'app', 'contact'];

最有效的方法是什么?

3 个答案:

答案 0 :(得分:1)

试试这个方法:

const chunks = [{id: 0, names: ['app']}, {id: 1, names: ['contact']}, {id: 2, names: ['bootstrap']}];
const original = ['bootstrap', 'app', 'contact'];
let result = [];
for(let i = 0; i < original.length; i++) {
    for(let j = 0; j < chunks.length; j++) {
        if(chunks[j].names.indexOf(original[i]) !== -1) {
            result.push(chunks[j]);
        }
    }
}
console.log(result);

答案 1 :(得分:1)

您可以使用原始名称索引的delat。

const chunks = [{ id: 0, names: ['app'] }, { id: 1, names: ['contact'] }, { id: 2, names: ['bootstrap'] }],
    original = ['bootstrap', 'app', 'contact'];

chunks.sort((a, b) => original.indexOf(a.names[0]) - original.indexOf(b.names[0]));

console.log(chunks);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:1)

简单方法:将块转换为对象,以便只使用键获得正确的块,然后映射(已经排序的)数组以插入对象。

cMap = chunks.reduce((p,c) => Object.assign( p, {[c.names[0]]: c} ), {});
const sorted = original.map(k => cMap[k]);