获取数组编号的数组

时间:2019-07-09 18:10:55

标签: javascript arrays

我有一个像这样的数组:

"test": {
  "builder: "@angular-devkit/build-angular:karma",
  "options": {
    ...
  },
  "configurations": {
    "production": {
      ...
    }
  }
}

我想获取映射到此的数组编号:

let array = [14, 42, 1, 3]

这是原因:

  • [1, 0, 3, 2] :因为1是第二大数字
  • 14:因为0是最大的数字
  • 42:...

到目前为止,我已经尝试过:

3

6 个答案:

答案 0 :(得分:9)

您可以获取索引并通过从给定数组中获取值对它们进行排序。

const sort = array => [...array.keys()].sort((a, b) => array[b] - array[a]);

console.log(sort([14, 42, 1, 3]));
console.log(sort([14, 42, 14, 3]));

答案 1 :(得分:2)

这是因为indexOf在找到第一个结果时停止。

您可以尝试在首次找到该值时将其更改为null,或者将其与结果中已有的值进行比较,然后忽略这些值。

let sort = (array) => {
  let result = []
  let x = array.slice(0).sort((a, b) => b - a)
  for (let elem of x) {
    result.push(array.indexOf(elem))
    array[array.indexOf(elem)] = null;
  }
  console.log(result)
}

答案 2 :(得分:0)

let sort = (arr) => {
    let arr2 = arr.slice().sort((a, b) => b - a);
    return arr.map((val) => {
        return arr2.indexOf(val);
    })
}
console.log(sort([14, 42, 1, 3]));

答案 3 :(得分:0)

您可以使用跟踪器对象,映射值和索引作为key/value对,并在循环array时从相应键中获取第一个索引并将其移位

let sort = (array) => {
  let result = []
  let x = array.slice(0).sort((a, b) => b - a)
  let tracker = x.reduce((op,inp,i)=>{
    op[inp] = op[inp] || []
    op[inp].push(i)
    return op
  },{})
  
  for (let elem of array) {
    let val = tracker[elem][0]
    tracker[elem].shift()
    result.push(val)
  }
  console.log(result)
}

sort([14, 42, 1, 3]) // working

sort([14, 42, 14, 3]) // includes the index "0" two times

答案 4 :(得分:0)

enter image description here

(() => {

  function getBiggestOrder (nums) {
    const lookup = {}
    const result = nums.slice(0).sort((a, b) => b - a).map((num, i) => {
      lookup[num] = i
      return num
    })
    
    return nums.map(n => lookup[n])
  }

  const op = getBiggestOrder([14, 42, 1, 3])

  console.log(op)

  return op

})()

答案 5 :(得分:0)

您基本上是在按从大到小的顺序编号。将它们按从大到小的重复数组排序。并将原始数组编号替换为重复数组中的索引。

Original = [14, 42, 1, 3]
Duplicate = [42, 14, 3, 1]
Duplicate indexes are [0, 1, 2, 3]

因此在第一个数组中找到42,然后用重复数组中42的索引替换它,等等。