为了账号安全,请及时绑定邮箱和手机立即绑定

在多维数组中搜索(算法)

在多维数组中搜索(算法)

jeck猫 2022-10-08 10:27:34
问题编写一个函数,获取序列和值,并根据变量是否存在于多维序列中返回真/假。例子:locate(['a','b',['c','d',['e']]],'e'); // should return truelocate(['a','b',['c','d',['e']]],'a'); // should return truelocate(['a','b',['c','d',['e']]],'f'); // should return false我的解决方案似乎可行,但 Code Wars 说:“arr.flat 不是函数。我使用免费的代码营浏览器来运行和测试我的代码,我的控制台日志表明我已经让它工作了,但是 Code Wars 说 arr.flat 不是一个函数。这是我的代码:var locate = function(arr, value){  let count = 0;  arr.flat().map((item)=>{    value == item ? count++ : count;  });  return count > 0 ? true : false;}我的问题我的代码是否正确?如果不是,那有什么问题。如果是这样,为什么 Code Wars 会抛出错误?
查看完整描述

4 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

您实际上并不需要.flat这个(尽管这将允许最优雅的解决方案const locate = (arr, value) => arr.flat().includes(value);)。这是一个使用普通for循环的简单递归解决方案:


const locate = function(arr, value) {

  for(let i = 0; i < arr.length; i++) {

    if (Array.isArray(arr[i]) {

      if (locate(arr[i], value) {

        return true;

      } 

    }

    if (arr[i] === value) {

      return true;

    } 

  }

  return false;


查看完整回答
反对 回复 2022-10-08
?
慕斯709654

TA贡献1840条经验 获得超5个赞

由于flat您的环境支持,请编写自己的平面方法并使用includes


const flat = (arr, res = []) => (

  arr.forEach((item) =>

    Array.isArray(item) ? flat(item, res) : res.push(item)

  ),

  res

);


const locate = (arr, value) => flat(arr).includes(value);


console.log(locate(["a", "b", ["c", "d", ["e"]]], "e"));

console.log(locate(["a", "b", ["c", "d", ["e"]]], "a"));

console.log(locate(["a", "b", ["c", "d", ["e"]]], "f"));


查看完整回答
反对 回复 2022-10-08
?
SMILET

TA贡献1796条经验 获得超4个赞

它似乎在这里工作。因此,您正在测试的浏览器可能不支持flat()


var locate = function(arr, value){

  let count = 0;

  arr.flat().map((item)=>{

    value == item ? count++ : count;

  });

  return count > 0 ? true : false;

}


console.log(locate(['a','b',['c','d',['e']]],'e')); // should return true

console.log(locate(['a','b',['c','d',['e']]],'a')); // should return true

console.log(locate(['a','b',['c','d',['e']]],'f')); // should return false


查看完整回答
反对 回复 2022-10-08
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

您可以采用递归方法,在查找时短路。


function locate(array, value) {

    return array.some(v => Array.isArray(v) && locate(v, value) || v === value);

}


console.log(locate(['a', 'b', ['c', 'd', ['e']]], 'e')); // true

console.log(locate(['a', 'b', ['c', 'd', ['e']]], 'a')); // true

console.log(locate(['a', 'b', ['c', 'd', ['e']]], 'f')); // false


查看完整回答
反对 回复 2022-10-08
  • 4 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信