我的目标是确定一个数组是否包含任何falsey元素并创建一个没有这些元素的新数组。我想出了一个可怕的丑陋功能,但我无法想出一个更好的方法来编写它。
function bouncer(arr) {
var newArray = [];
for (var i = 0; i < arr.length; i++)
if (arr[i] !== false ) {
if (arr[i] !== NaN) {
if (arr[i] !== "") {
if (arr[i] !== 0) {
if (arr[i] !== undefined) {
if (arr[i] !== null) {
newArray.push(arr[i]);
}}}}}}
return newArray;
}
bouncer([7, 'ate', '', false, 9]);
我尝试使用if语句,例如
if (arr[i] !== false || arr[i] !== "")
但是当我这样做时,由于某种原因它不会捕获这两个条件。什么是更简单的方法呢?
答案 0 :(得分:1)
您正在使用OR,而应使用AND:
if (arr[i] !== false && arr[i] !== "")
答案 1 :(得分:1)
检查arr[i]
是否真实,然后按下该值。
arr[i] && newArray.push(arr[i]);
完整代码:
function bouncer(arr) {
var newArray = [], i;
for (i = 0; i < arr.length; i++) {
arr[i] && newArray.push(arr[i]);
}
return newArray;
}
或Array.filter
:
newArr = arr.filter(function (a) { return a; });
答案 2 :(得分:1)
更可读的@Nina Scholz的答案是明确检查真实性而不依赖于短路。
if (arr[i]) { newArray.push(arr[i]); }
当然,您可以使用filter
newArr = arr.filter(function(el){ return el == true; });
答案 3 :(得分:0)
你应该使用过滤器。
// - trying to look for substring in array
// - if match is found
// - replace substring without using the native method replace();
var div = $('.insert');
data = ["erf,", "erfeer,rf", "erfer"];
data = data.map(function (x) {
return /""/g.test(x) ? x.replace(/""/g, "") : x
});
function fakeReplace(data, substr, newstr) {
//should show ["erf,", "erfeer,rf", "erfer"];
div.append("data before match replace = " + data);
div.append("\<br>");
div.append("substr = " + substr);
div.append("\<br>");
div.append("newstr = " + newstr);
div.append("\<br>");
return data.split(substr).join(newstr);
}
fakeReplace(data, "erf", "blue");
//should show ["blue,", "blueeer,rf", "blueer"];
div.append("data after fakeReplace is executed = " + data);
有关过滤器的文档,请访问:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter