Так швидке запитання. Що робити, якщо у вас є два масиви об’єктів, і ви хотіли б “вирівняти” ці масиви об’єктів, щоб ви могли переконатися, що об’єкти кожного масиву знаходяться в порядку, як інші масиви? Що робити, якщо ви не знаєте, які ключі та значення містить будь-який з об’єктів усередині масивів ... Набагато менше, в якому порядку вони навіть знаходяться?
Так що вам потрібно «WildCard Expression» для свого [].filter
, [].map
і т.д. Як ви отримуєте дике вираз карти?
var jux = (function(){
'use strict';
function wildExp(obj){
var keysCrude = Object.keys(obj),
keysA = ('a["' + keysCrude.join('"], a["') + '"]').split(', '),
keysB = ('b["' + keysCrude.join('"], b["') + '"]').split(', '),
keys = [].concat(keysA, keysB)
.sort(function(a, b){ return a.substring(1, a.length) > b.substring(1, b.length); });
var exp = keys.join('').split(']b').join('] > b').split(']a').join('] || a');
return exp;
}
return {
sort: wildExp
};
})();
var sortKeys = {
k: 'v',
key: 'val',
n: 'p',
name: 'param'
};
var objArray = [
{
k: 'z',
key: 'g',
n: 'a',
name: 'b'
},
{
k: 'y',
key: 'h',
n: 'b',
name: 't'
},
{
k: 'x',
key: 'o',
n: 'a',
name: 'c'
}
];
var exp = jux.sort(sortKeys);
console.log('@juxSort Expression:', exp);
console.log('@juxSort:', objArray.sort(function(a, b){
return eval(exp);
}));
Ви також можете використовувати цю функцію за ітерацією для кожного об'єкта, щоб створити кращий колективний вираз для всіх ключів у кожному з ваших об'єктів, а потім відфільтрувати ваш масив таким чином.
Це невеликий фрагмент з API Juxtapose, який я майже завершив, що робить це, рівність об’єктів з винятками, об’єднання об’єктів та конденсацію масиву. Якщо це все, що вам потрібно чи потрібно для вашого проекту, будь ласка, коментуйте, і я зроблю доступ до lib раніше, ніж пізніше.
Сподіваюся, це допомагає! Щасливого кодування :)