我试图删除给定参数中的常见元素 创建具有唯一元素的最终数组。 在下面的例子中,我的最后一个数组给了我[1,3,4,5]而不是[1,4,5]。 我做了调试,而元素(3)之一没有经过循环。 在元素(2)之后,它跳到元素(4)。我很困惑为什么会这样?我的代码有什么问题吗?任何帮助赞赏。 谢谢
function arrayBreaker(arr) {
let test = [];
test.push(arguments[1]);
test.push(arguments[2]);
let target = arguments[0];
target.filter(val => {
if (test.indexOf(val) > -1) {
target.splice(target.indexOf(val), 1);
}
});
return target;
}
console.log(arrayBreaker([1,2,3,4,5], 2, 3));
答案 0 :(得分:0)
你正在使用.filter()
像一个通用迭代器,并改变你正在迭代的数组,这会导致问题,因为迭代器不知道你要删除的项目。
如果您需要改变原始数组,而是从.indexOf()
回调中返回.filter()
操作的结果,或者更好的是,请改用.includes()
,然后复制结果在第一次清除它之后进入原始版本。
function arrayBreaker(target, ...test) {
const res = target.filter(val => !test.includes(val));
target.length = 0;
target.push(...res);
return target;
}
console.log(arrayBreaker([1, 2, 3, 4, 5], 2, 3));
如果您不需要变异,但可以返回副本,那么它就更简单了。
function arrayBreaker(target, ...test) {
return target.filter(val => !test.includes(val));
}
console.log(arrayBreaker([1, 2, 3, 4, 5], 2, 3));
答案 1 :(得分:0)
Array正在根据过滤条件返回一个新数组,在这种情况下,您正在检查test的索引。如果要保留值,则回调函数期望为true,否则返回false。在你的情况下,你不应该在过滤器回调中切割目标,而是:
library(meta)
library(metafor)
m1 <- metaprop(obs, denom, studies, comb.random=F, byvar=setting,
bylab="Setting", byseparator=": ")
m2 <- metaprop(obs, denom, studies, comb.random=F, byvar=setting,
bylab="Setting", byseparator=": ", method="GLMM")
m2$w.fixed <- m1$w.fixed
forest(m2, print.tau2 = FALSE, col.by="black", text.fixed = "Total",
text.fixed.w = "Subtotal", rightcols = c("effect","ci"),
leftlabs=c("Study","Intubated","Total"))
有关数组过滤器的更多信息,请在此处查看文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
根据您的使用案例,我认为很少有些事情会有所帮助,首先我会声明函数参数,以便明确说明arrayBreaker需要多个参数。其次,我希望第二个参数作为一个数组,因为我们期待多个值。如下所示:
function arrayBreaker(arr) {
let test = [];
test.push(arguments[1]);
test.push(arguments[2]);
let target = arguments[0];
let newArray = target.filter(val => {
if (test.indexOf(val) > -1) {
// filter value out
return false;
}
// keep the val inside new array
return true;
});
return newArray;
}
console.log(arrayBreaker([1,2,3,4,5], 2, 3));