Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据公共对象属性排列数组中对象的索引';将值按各自的顺序分成两个单独的数组_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

Javascript 根据公共对象属性排列数组中对象的索引';将值按各自的顺序分成两个单独的数组

Javascript 根据公共对象属性排列数组中对象的索引';将值按各自的顺序分成两个单独的数组,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我有一个对象数组,其中属性“selectOrder”只能对两个对象具有重复值(场景:一个对象以相同的值一个接一个地被选择)。我需要两个单独的数组,在那里我可以找到对象的索引,这些对象的“selectOrder”属性的值与新数组的索引顺序相匹配 编辑:如果没有重复的“selectOrder”,那么对象的索引将在两个数组中重复 let A = [ 0: {id:343, name:'Apple', selectOrder:0}, 1: {id:423, name:'Banana' selectOrd

我有一个对象数组,其中属性“selectOrder”只能对两个对象具有重复值(场景:一个对象以相同的值一个接一个地被选择)。我需要两个单独的数组,在那里我可以找到对象的索引,这些对象的“selectOrder”属性的值与新数组的索引顺序相匹配

编辑:如果没有重复的“selectOrder”,那么对象的索引将在两个数组中重复

let A = [
0: {id:343, name:'Apple', selectOrder:0},
1: {id:423, name:'Banana' selectOrder:2}
2: {id:234, name:'Cat', selectOrder:3},
3: {id:543, name:'Dog', selectOrder:1},
4: {id:432, name:'Elephant', selectOrder:1},
5: {id:545, name:'Father', selectOrder:0},
];
期望输出:

Arr1=[0, 3, 1, 2]
Arr2=[5, 4, 1, 2]

编辑:理想情况下,它应该首先在Arr1中添加selectOrder:0对象的索引,然后立即查找selectOrder:0的其他对象,并将其索引添加到Arr2,依此类推其他selectOrders。

我可以想到一个快速解决方案

A=[{
id:343,
名称:'苹果',
选择订单:0
},
{
身份证号码:423,
名称:'香蕉',
选择顺序:2
},
{
id:234,
名字:'猫',
选择顺序:3
},
{
身份证号码:543,
名字:“狗”,
选择顺序:1
},
{
id:432,
名称:'大象',
选择顺序:1
},
{
身份证号码:545,
姓名:'父亲',
选择订单:0
},
];
常量跟踪器={};
A.forEach((el,i)=>{
如果(!tracker[el.selectOrder]){
跟踪器[el.selectOrder]={
index1:i
};
}否则{
跟踪器[el.selectOrder].index2=i;
}
});
常数Arr1=[];
常数Arr2=[];
for(让我们选择对象的顺序。值(跟踪器)){
Arr1.push(选择order.index1);
如果(选择Order.index2){
Arr2.push(选择order.index2);
}否则{
Arr2.push(选择order.index1);
}
}
log('Arr1:',Arr1);

log('Arr2:',Arr2)我刚刚对您的数据结构和输出格式做了细微的更改。你可以试试这个。如果它不工作,那么你可以与我联系

A=[
{i:0,id:343,名称:'Apple',选择顺序:0},
{i:1,id:423,姓名:'Banana',选择顺序:2},
{i:2,id:234,姓名:'Cat',选择顺序:3},
{i:3,id:543,姓名:'Dog',选择顺序:1},
{i:4,id:432,姓名:'Elephant',选择顺序:1},
{i:5,id:545,姓名:'Father',选择顺序:0},
];
//按selectOrder排序
A.排序((A,b)=>A.selectOrder-b.selectOrder);
设arr1=[],arr2=[];
A.forEach((项目,i)=>{
如果(!arr1.find((x,k)=>k==item.selectOrder)){
arr1.push({[item.selectOrder]:item.i});
}如果(!arr2.find((x,k)=>k==item.selectOrder))则为else{
arr2.push({[item.selectOrder]:item.i});
}
});
//将额外值从arr1推入arr2
arr2=[…arr2,…arr1.slice(arr2.length)]

控制台日志(arr1、arr2)请注意,此处显示的代码在语法上不正确。请对数组使用正确的语法(例如,
[0,3,1,2]
[5,4,1,2]
),而不是代码现在使用的类似对象的语法。如果您是从控制台复制,请使用
console.log(array,null,2)
以获得最佳输出。@谢谢,我已根据您的建议对其进行了编辑。您是否尝试编写代码并需要帮助?如果是这样,请发布您尝试的代码以及出错的地方。如果没有,您应该先尝试提出解决方案,然后在这里发布您尝试的内容(以及它如何无法实现您想要的功能)。实际上,我需要它作为数组中的值,而不是数组中的对象。在上一个示例中,我只是显示数组的索引,以确保它们与“selectOrder”的值相对应。