如何解决在 javascript 中实现删除它的功能,但没有得到要求的答案
中级算法脚本:放弃
给定数组 arr
,从第一个元素(索引 0)开始迭代并删除每个元素,直到当迭代的元素通过它时函数 func
返回 true。
一旦条件满足,则返回数组的其余部分,否则,arr应作为空数组返回。
function dropElements(arr,func) {
let newArr=[];
for(let i=0; i<arr.length; i++){
if(func(arr[i])){
newArr.push(arr[i])
}
}
return newArr;
}
console.log(dropElements([0,1,1],function(n) {return n === 1;}));
console.log(dropElements([1,2,3,9,2],function(n) {return n > 2;}));
- 我得到的第一个测试的输出是:[1,1] 和
- 第二次测试得到:[ 3,9 ] 但所需的输出应该是:[1,1] 和 [3,2];
解决方法
您需要在 func
返回 true 时设置一个标志,或者找到它返回 true 的第一个元素的索引,或者类似的东西。我认为简单的 findIndex
和 slice
在这里最简单:
function dropElements(arr,func) {
const index = arr.findIndex(func);
return index === -1 ? [] : arr.slice(index);
}
console.log(dropElements([0,1,1],function(n) {
return n === 1;
}));
console.log(dropElements([1,2,3,9,2],function(n) {
return n > 2;
}));
如果您必须手动迭代:
function dropElements(arr,func) {
const newArr = [];
let found = false;
for (let i = 0; i < arr.length; i++) {
if (!found && func(arr[i])) {
found = true;
}
if (found) {
newArr.push(arr[i])
}
}
return newArr;
}
console.log(dropElements([0,function(n) {
return n > 2;
}));
对此还有一个相当优雅的递归解决方案。这可能不是很节省时间或空间的方法,但它简单明了:
const dropElements = (xs,fn) =>
xs .length == 0
? []
: fn (xs [0])
? xs
: dropElements (xs .slice (1),fn)
console.log(dropElements([0,function(n) {
return n > 2;
}));
传入一个数组和一个函数,如果函数为第一个元素返回true
,我们返回整个数组。如果不是,我们删除第一个元素 (.slice (1)
) 并重试,当数组为空时停止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。