我在JavaScript中有两个数组,我想根据第一个数组的顺序重新安排一个。
第一个阵列:
var arrayOne = [
"5",
"1",
"2",
"4"
]
我希望根据与arrayOne匹配的page_id重新排列的第二个数组:
var arrayTwo = [
{
"page_id" : "5",
"page_title" : "About"
},
{
"page_id" : "2",
"page_title" : "Home"
},
{
"page_id" : "4",
"page_title" : "Contact Us"
},
{
"page_id" : "1",
"page_title" : "Gallery"
},
];
重新安排后 我想基于page_id重新排列arrayTwo,所以一旦重新排列第二个数组就会看起来像:
var arrayTwo = [
{
"page_id" : "5",
"page_title" : "About"
},
{
"page_id" : "1",
"page_title" : "Gallery"
},
{
"page_id" : "2",
"page_title" : "Home"
},
{
"page_id" : "4",
"page_title" : "Contact Us"
},
];
我在这一点上非常困难,我在这里发现了许多排序'解决方案'和谷歌,但它们似乎没有用。我已经尝试使用for循环来做到这一点,但我并没有真正得到任何结果。我通常不会寻求帮助,但我已经被困了3个小时的搜索。
第一个匹配在第二个匹配page_id
,所以我可以使用匹配,但如上所述,我很困难。
非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
首先将第二个数组转换为对象 - 键将是page_id,例如:
var map = arrayTwo.reduce((a, b) => {
a[b.page_id] = b;
return a;
}, {});
现在我们可以轻松地map
第一个数组,例如:
arrayOne.map(x => map[x]);
答案 1 :(得分:0)
您可以使用Array.prototype.map()
来迭代arrayOne
,Array.prototype.filter()
来匹配arrayTwo
的对象page_id
等于当前arrayOne
值
var arrayOne = [
"5",
"1",
"2",
"4"
];
var arrayTwo = [{
"page_id": "5",
"page_title": "About"
}, {
"page_id": "2",
"page_title": "Home"
}, {
"page_id": "4",
"page_title": "Contact Us"
}, {
"page_id": "1",
"page_title": "Gallery"
}];
arrayTwo = arrayOne.map(function(id) {
return arrayTwo.filter(function(obj) {
return obj.page_id === id
})[0]
});
console.log(arrayTwo);
答案 2 :(得分:0)
首先创建一个“索引”,给定一个对象编号可以返回数字:
<table class="col-xs-12">
然后您可以使用索引对对象重新排序:
var index = {};
arrayTwo.forEach(function(obj){index[obj.page_id] = obj;});
答案 3 :(得分:0)
您还可以使用2 forEach(每个阵列一个)
var arrayOne = [
"5",
"1",
"2",
"4"
]
var arrayTwo = [
{
"page_id" : "5",
"page_title" : "About"
},
{
"page_id" : "2",
"page_title" : "Home"
},
{
"page_id" : "4",
"page_title" : "Contact Us"
},
{
"page_id" : "1",
"page_title" : "Gallery"
},
];
var result = [];
arrayOne.forEach(item => arrayTwo.forEach(element => { if (item === element.page_id) result.push(element)}));
console.log(result);
答案 4 :(得分:0)