如何在相同值的所有情况下获得索引?



我有两个数组,其中一个用于检查索引,另一个用于检查值。

var array = [1200.0, 1000.0, 1000.0, 200.0, 1000.0, 1800.0, 350.0, 336.0, 110.0, 1900.0, 130.0];
var check = [1200.0, 1000.0, 1000.0, 200.0, 110.0, 130.0];
var indeks = [];

for(var i = 0; i < check.length; i++){
// Logger.log(check[i]);
//indeks.push(array.indexOf(check[i]));
function getAllIndexes(arr, val) {
var indexes = [], i = -1;
while ((i = arr.indexOf(val, i+1)) != -1){
indexes.push(i);
}
return indexes;
}
indeks.push(getAllIndexes(array, check[i]));
}
Logger.log(indeks);

我现在得到的输出是:[[0.0], [1.0, 2.0, 4.0], [1.0, 2.0, 4.0], [3.0], [8.0], [10.0]]

我想得到这样的输出:[0, 1, 2, 3, 8, 10]

我在另一个问题中发现了getAllIndexes,但不知何故它不起作用,我不确定我错在哪里。当我只使用indeks.push(array.indexOf(check[i]))时,我得到了这个:[0.0, 1.0, 1.0, 3.0, 8.0, 10.0],这非常接近我正在寻找的结果

如果有人知道解决办法,我将非常感激

var array = [1200.0, 1000.0, 1000.0, 200.0, 1000.0, 1800.0, 350.0, 336.0, 110.0, 1900.0, 130.0];
var check = [1200.0, 1000.0, 1000.0, 200.0, 110.0, 130.0];
function getUniqueIndexes(array, check) {
// copy array to prevent mutation
var arr = array.slice()
// loop through `check`
const indeks = check.reduce((acc, cur) => {
// find index of the current value
var i = arr.indexOf(cur)
if (i !== -1) {
// erase the value to prevent further matches
arr[i] = null
// return the acumulator with the new index for each loop
return [...acc, i]
}
}, [])
return indeks
}
const indeks = getUniqueIndexes(array, check)
console.log(indeks)
// result should be [0, 1, 2, 3, 8, 10]

就是这样;)

我不确定这段代码是否是ES6,也许你需要在使用

之前对它进行翻译。

您的代码中存在一些问题,例如在循环中声明函数。当你使用indeks.push(array.indexOf(check[i]))时,你非常接近答案。之所以将indeks返回为[0.0, 1.0, 1.0, 3.0, 8.0, 10.0],是因为该函数在数组中从头开始查找val的索引。因此,如果您有重复的元素(在本例中是),它只查找第一个出现的元素。我通过查看MDN参考解决了这个问题。它说indexOf还有一个名为fromIndex的可选参数。从这里开始搜索数组。使用nums数组,我在函数中每次都推到它。我取nums的长度,并将其作为fromIndex参数传递进来。希望这有意义,下面是代码:

var array = [1200.0, 1000.0, 1000.0, 200.0, 1000.0, 1800.0, 350.0, 336.0, 110.0, 1900.0, 130.0];
var check = [1200.0, 1000.0, 1000.0, 200.0, 110.0, 130.0];
var indeks = []; 
var nums = [];
var indexes = []; // Top Level (for scope)
function getAllIndexes(arr, val) {
if (arr.indexOf(val, nums.length) > -1) {
indexes.push(arr.indexOf(val, nums.length));
nums.push("num")
}
}        
for (var i = 0; i < check.length; i++) {
indeks.push(getAllIndexes(array, check[i]));
}  
console.log(indexes)

相关内容

最新更新