亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在多維數組中搜索(算法)

在多維數組中搜索(算法)

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 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號