如何在JavaScript中查找和排序对象的元素索引在数组中

时间:2018-11-03 19:58:05

标签: javascript arrays find indexof

问题的更新版本:我的目标是获取此数组元素的索引,条件是关键参数的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);

2 个答案:

答案 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;