如何在 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;