问题的更新版本:我的目标是获取此数组元素的索引,条件是关键参数的subelement 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);
答案 0 :(得分:1)
您可以使用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);
答案 1 :(得分:1)
您需要从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
实际上包含多个元素,则需要考虑这一点,并确定需要使用哪个元素,并相应地更改element.params[0].param_name;
行