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;
}

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"));

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

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
添加回答
举报