首页 > 解决方案 > 查找满足条件的数组索引的位置

问题描述

我是 ES6 的新手,正在尝试学习如何编写一个函数来查找第一个数组索引号,其中大多数 0 一起出现 - 例如:

var arr = [0,0,1,0,0,0,1,1,0] // should return index 3
var arr = [0,0,1,0,0,0,1,1,0,0,0,0] // should return index 8
var arr = [0,0,1,0] // should return index 0

不知道为什么,但我的尝试只是返回一个空数组,而不是一个索引从 0 变为 1 的数组:

var arr = [0,0,1,0,0,0,1,1,0];
function amounts(c, i, arr) {
    var zeros = 0, onesTogether = 0, where = [], changes = 0, longest0s;

    if (c === 0 && arr[i+1] === 0 || c === 0 && arr[i-1] === 0) {
        zeros++;
    } else {
        longest0s = zeros;
        zeros = 0;
        changes++;
        where.push[i];
    }

    console.log('longest0s: ' + longest0s + '. changes: ' + changes + '. where: ' + where);
    return where;

}
arr.reduce(amounts);

我不知道如何找到大多数 0 一起的起始索引,但不知道为什么数组为空。有任何想法吗?

这应该返回 [2,6,7] 的数组

[0,0,1,0,0,0,1,1,0]

标签: javascript

解决方案


总体思路:找到最长的 0s 子串并检查它的索引。

您可以尝试:

const find = arr => {
  const str = arr.join('');
  const longest = str.split(1).reduce((a, b) => a.length > b.length ? a : b);
  return str.indexOf(longest);
}

console.log(find([0,0,1,0,0,0,1,1,0])); // 3
console.log(find([0,0,1,0,0,0,1,1,0,0,0,0])); // 8
console.log(find([0,0,1,0])); // 0


推荐阅读