如何依据array2的指定顺序对数组或对象属性进行排序?
实现方案
数组按指定顺序排序
实现逻辑为优先匹配array2内元素的顺序,不在array2内的元素保持原有相对顺序排在后方:
const array1 = [7, 2, 6, 3, 4, 1]; const array2 = [1, 2, 9]; const orderMap = new Map(array2.map((v, i) => [v, i])); const defaultOrder = array2.length; const array3 = [...array1].sort((a, b) => (orderMap.get(a) ?? defaultOrder) - (orderMap.get(b) ?? defaultOrder) );
运行后array3的值为[1, 2, 7, 6, 3, 4],符合预期。
对象属性按指定顺序重排
ES6+ 规范中对象的字符串类型键会保留插入顺序,因此按需求顺序插入键生成新对象即可:
const object1 = {key5: 'value5', key3: 'value3', key4: 'value4', key1: 'value1', key2: 'value2'}; const array2 = ["key1", "key2", "key3"]; const sortedKeys = [...array2, ...Object.keys(object1).filter(k => !array2.includes(k))]; const object3 = Object.fromEntries(sortedKeys.map(k => [k, object1[k]]));
运行后object3的属性顺序完全符合要求。
内容的提问来源于stack exchange,提问作者Maradox
相关产品推荐
相关产品推荐

