我需要从数组中删除字符串,我有这个功能; 它进行一些随机测试并返回结果。
function filter_list(array) {
array.filter((elem) => typeof elem === "string");
return (array);
}
当我没有返回任何东西时,我得到了未定义(显然),但是当我返回数组时,我得到了这个:
"Expected: '[1, 2]', instead got: '[1, 2, \'a\', \'b\']'
Expected: '[1, 0, 15]', instead got: '[1, \'a\', \'b\', 0, 15]'
Expected: '[1, 2, 123]', instead got: '[1, 2, \'aasf\', \'1\', \'123\',
123]'
Expected: '[]', instead got: '[\'a\', \'b\', \'1\']'
Expected: '[1, 2]', instead got: '[1, 2, \'a\', \'b\']' "
答案 0 :(得分:2)
你误导了array filter
两次。
第一个问题是当你调用filter时数组不会改变。
// This code isn't the correct yet, continue below
function filter_list(array) {
// You have to return the result of filter. The 'array' is not changed.
return array.filter((elem) => typeof elem === "string");
}
第二个问题是您正在过滤想要过滤的对面。
// Correct code
function filter_list(array) {
// If the condition is true, the element will be kept in the NEW array.
// So it must be false for strings
return array.filter((elem) => typeof elem !== "string");
}
filter()
为每个元素调用一次提供的callback
函数 一个数组,并构造一个包含所有值的新数组callback
会返回强制为true
的值。调用callback
仅适用于已分配值的数组索引;它不是 为已删除或从未进行过的索引调用 指定值。未通过callback
测试的数组元素 只是被跳过,并且不包含在新数组中。
答案 1 :(得分:0)
但这很容易。这是你将如何做到这一点
let data = [
"Cat",
1451,
14.52,
true,
"I will be removed too :("
];
let filteredData = data.filter(item => typeof item !== "string");
console.log(filteredData); // or return it