Câu hỏi nhanh quá. Điều gì sẽ xảy ra nếu bạn có hai mảng đối tượng và bạn muốn 'căn chỉnh' các mảng đối tượng này để bạn có thể đảm bảo các đối tượng của mỗi mảng theo thứ tự như của mảng kia? Điều gì sẽ xảy ra nếu bạn không biết các khóa và giá trị bất kỳ đối tượng nào bên trong mảng chứa ... Ít hơn nhiều so với thứ tự của chúng?
Vì vậy, bạn cần có một 'Biểu wildcard' cho bạn [].filter
, [].map
vv Làm thế nào để bạn có được một biểu thức thẻ hoang dã?
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);
}));
Bạn cũng có thể sử dụng hàm này qua một lần lặp cho từng đối tượng để tạo một biểu thức tập hợp tốt hơn cho tất cả các khóa trong mỗi đối tượng của bạn, rồi lọc mảng của bạn theo cách đó.
Đây là một đoạn mã nhỏ từ API Juxtapose mà tôi có gần như hoàn chỉnh, thực hiện điều này, bình đẳng đối tượng với các trường hợp miễn trừ, hợp nhất đối tượng và ngưng tụ mảng. Nếu đây là những thứ bạn cần hoặc muốn cho dự án của mình, vui lòng bình luận và tôi sẽ làm cho lib có thể truy cập sớm hơn.
Hi vọng điêu nay co ich! Chúc bạn viết mã vui vẻ :)