我下面有两个对象数组
\s
如您所见,我的第二个数组未按第一个数组的顺序排列。我试图订购与数组1相同的第二个数组。
我使用下面的代码但是得到了结果
var array_1 = [{"Product_Name" : "p1"},{"Product_Name" : "p2"},{"Product_Name" : "p3"}]
var array_2 = [{"Product_Name" : "p5"},{"Product_Name" : "p1"},{"Product_Name" : "p3"},{"Product_Name" : "p2"},{"Product_Name" : "p4"}]
任何建议都将第二个数组作为波纹管
function mapOrder (array, order, key) {
array.sort( function (a, b) {
var A = a[key], B = b[key];
if (order.indexOf(A) == order.indexOf(B)) {
return 1;
} else {
return -1;
}
});
return array;
};
var item_array, item_order, ordered_array;
item_array = array_2;
item_order = array_1;
ordered_array = mapOrder(item_array, item_order, 'Product_Name');
答案 0 :(得分:1)
此代码基于目标数组获取目标索引,并将其与该索引中当前的值交换。该代码并不完整,因此您必须添加更多逻辑以纠正这种简单的就地排序的残留问题。
var array_1 = [{"Product_Name" : "p1"},{"Product_Name" : "p2"},{"Product_Name" : "p3"}]
var array_2 = [{"Product_Name" : "p5"},{"Product_Name" : "p1"},{"Product_Name" : "p3"},{"Product_Name" : "p2"},{"Product_Name" : "p4"}]
function btoa(a, b, key){
b.map((m,from_ind)=> {
let to_ind = a.findIndex((target)=>target[key] == m[key])
if(from_ind != to_ind && to_ind >= 0) {
let temp = b[to_ind];
b[to_ind] = m;
b[from_ind] = temp;
}
})
console.log(b)
return b
}
btoa(array_1, array_2, "Product_Name");