从另一个对象数组对对象数组进行排序JQUERY

时间:2020-04-21 04:20:37

标签: javascript jquery arrays

我下面有两个对象数组

\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');

1 个答案:

答案 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");

相关问题