Javascript 根据存储在另一个数组中的引用对数组进行排序
这里的情况很奇怪,但我遇到过 我有两个用于此场景的对象数组,比如Javascript 根据存储在另一个数组中的引用对数组进行排序,javascript,arrays,Javascript,Arrays,这里的情况很奇怪,但我遇到过 我有两个用于此场景的对象数组,比如操作和行 在操作的内部我有如下格式的对象: { id: 'randomGeneratedId1', text: 'Click here', url: 'stackoverflow.com' } 在行的内部我有: { id: 'randomGeneratedId2', text: 'Line 1' } 最后,我有另一个数组,它存储这些的顺序。。。让我们称之为elementOrder [
操作
和行
在操作的内部
我有如下格式的对象:
{
id: 'randomGeneratedId1',
text: 'Click here',
url: 'stackoverflow.com'
}
在行的内部
我有:
{
id: 'randomGeneratedId2',
text: 'Line 1'
}
最后,我有另一个数组,它存储这些的顺序。。。让我们称之为elementOrder
[
{ id: 'randomGeneratedId1', order: 1 },
{ id: 'randomGeneratedId2', order: 2 }
]
基本上,我想从上面提到的elementOrder
中执行的操作,我想查看行
和操作
数组,并将它们按顺序放入最终数组中,因此我得到了一个数组的结果,该数组具有元素数据列表和ID,它们按顺序排列
结果是这样的原因是因为我有一个名为class.line('line 1').action('Click here','stackoverflow.com').line(…).action(…).action(…)
我希望链接是无限的,但我需要在不同的对象中同时使用它们
我知道这是可能的,我已经试着绘制了地图等等,但我似乎不能把我的头围绕着它
顺序
字段对elementOrder
数组进行排序elementder
数组操作
和行
数组以查找匹配项并基于此构建最终数组
var actions = [
{
id: 'randomGeneratedId1',
text: 'Click here',
url: 'stackoverflow.com'
}]
var lines = [
{
id: 'randomGeneratedId2',
text: 'Line 1'
}
]
var elementOrder = [
{ id: 'randomGeneratedId2', order: 2 },
{ id: 'randomGeneratedId1', order: 1 }
]
// this is where you build the final array
var finalArray = elementOrder.sort((a, b) => a.order - b.order).map(ele => {
var action = actions.find(action => ele.id === action.id);
if (action) {
return action;
}
var line = lines.find(line => ele.id === line.id);
if (line) {
return line;
}
return ele;
});
console.log(JSON.stringify(finalArray));
// [{"id":"randomGeneratedId1","text":"Click here","url":"stackoverflow.com"},{"id":"randomGeneratedId2","text":"Line 1"}]
您可以使用
映射
并直接使用所需函数调用函数链
var action = [],
lines = [],
elementOrder = [],
map = new Map;
actions.forEach(payload => m.set(payload.id, { type: 'action', payload }));
actions.forEach(payload => m.set(payload.id, { type: 'line', payload }));
elementOrder.reduce((o, { id }) => {
var data = m.get(id);
return o[data.type](data.payload.text, data.payload.url)
}, class);
你想让他们直接打电话还是用通缉令的数组?@NinaScholz抱歉,你这是什么意思?