如何在 javascript 中的数组中查找和排序对象元素的索引
How can I find and sort the indexes of the elements of an object in array in javascript
问题的更新版本:我的目标是获取此数组元素的索引,条件是键参数的子元素 param_name 将定义对象的索引。例如,键名为 'caller1' 的对象的默认索引应为 0,但由于 param_name 为 'caller2',它将采用索引 1;类似地,具有键名 'caller3' 的对象 3 将采用索引 0,因为 param_name 是 'caller1'。对于具有键名 'caller2' 的对象 2,因为 param_name 与键名 caller2 相同,它将保留其默认索引 1。
const array1 = [{
name: 'caller1',
cost: 12,
params:[{param_name:'caller2',apparatus:'fittings'}]
},
{
name: 'caller2',
cost: 2,
params:[{param_name:'caller2',apparatus:'fittings'}]
},
{
name: 'caller3',
cost: 12,
params:[{param_name:'caller1',apparatus:'valves'}]
}
];
const results = []
for (let j=0; j<array1.length;j++){
results[j] = array1[j].findIndex(a => a.name==array1[j].name);
}
console.log(results);
您可以使用 Map
并映射索引。
const
array = [{ name: 'caller1', cost: 12, params: [{ param_name: 'caller2', apparatus: 'fittings' }] }, { name: 'caller2', cost: 2, params: [{ param_name: 'caller2', apparatus: 'fittings' }] }, { name: 'caller3', cost: 12, params: [{ param_name: 'caller1', apparatus: 'valves' }] }],
map = new Map(array.map(({ name }, i) => [name, i])),
result = array.map(({ params: [{ param_name }] }) => map.get(param_name));
console.log(result);
您需要从 params
中获取 属性 并将其用作搜索参数以在遍历主数组时使用
var indexes = array1.map(element => {
var nameToCheck = element.params[0].param_name;
for (let i = 0; i < array1.length; i++) {
if (array1[i].name == nameToCheck) {
return i;
}
}
})
演示
const array1 = [{
name: 'caller1',
cost: 12,
params: [{
param_name: 'caller2',
apparatus: 'fittings'
}]
},
{
name: 'caller2',
cost: 2,
params: [{
param_name: 'caller2',
apparatus: 'fittings'
}]
},
{
name: 'caller3',
cost: 12,
params: [{
param_name: 'caller1',
apparatus: 'valves'
}]
}
];
var indexes = array1.map(element => {
var nameToCheck = element.params[0].param_name;
for (let i = 0; i < array1.length; i++) {
if (array1[i].name == nameToCheck) {
return i;
}
}
})
console.log(indexes);
请注意,如果 params
实际上包含超过 1 个元素,您需要考虑到这一点并决定您需要使用哪一个并相应地更改 element.params[0].param_name;
行
问题的更新版本:我的目标是获取此数组元素的索引,条件是键参数的子元素 param_name 将定义对象的索引。例如,键名为 'caller1' 的对象的默认索引应为 0,但由于 param_name 为 'caller2',它将采用索引 1;类似地,具有键名 'caller3' 的对象 3 将采用索引 0,因为 param_name 是 'caller1'。对于具有键名 'caller2' 的对象 2,因为 param_name 与键名 caller2 相同,它将保留其默认索引 1。
const array1 = [{
name: 'caller1',
cost: 12,
params:[{param_name:'caller2',apparatus:'fittings'}]
},
{
name: 'caller2',
cost: 2,
params:[{param_name:'caller2',apparatus:'fittings'}]
},
{
name: 'caller3',
cost: 12,
params:[{param_name:'caller1',apparatus:'valves'}]
}
];
const results = []
for (let j=0; j<array1.length;j++){
results[j] = array1[j].findIndex(a => a.name==array1[j].name);
}
console.log(results);
您可以使用 Map
并映射索引。
const
array = [{ name: 'caller1', cost: 12, params: [{ param_name: 'caller2', apparatus: 'fittings' }] }, { name: 'caller2', cost: 2, params: [{ param_name: 'caller2', apparatus: 'fittings' }] }, { name: 'caller3', cost: 12, params: [{ param_name: 'caller1', apparatus: 'valves' }] }],
map = new Map(array.map(({ name }, i) => [name, i])),
result = array.map(({ params: [{ param_name }] }) => map.get(param_name));
console.log(result);
您需要从 params
中获取 属性 并将其用作搜索参数以在遍历主数组时使用
var indexes = array1.map(element => {
var nameToCheck = element.params[0].param_name;
for (let i = 0; i < array1.length; i++) {
if (array1[i].name == nameToCheck) {
return i;
}
}
})
演示
const array1 = [{
name: 'caller1',
cost: 12,
params: [{
param_name: 'caller2',
apparatus: 'fittings'
}]
},
{
name: 'caller2',
cost: 2,
params: [{
param_name: 'caller2',
apparatus: 'fittings'
}]
},
{
name: 'caller3',
cost: 12,
params: [{
param_name: 'caller1',
apparatus: 'valves'
}]
}
];
var indexes = array1.map(element => {
var nameToCheck = element.params[0].param_name;
for (let i = 0; i < array1.length; i++) {
if (array1[i].name == nameToCheck) {
return i;
}
}
})
console.log(indexes);
请注意,如果 params
实际上包含超过 1 个元素,您需要考虑到这一点并决定您需要使用哪一个并相应地更改 element.params[0].param_name;
行