所以,如果我有:
A=['a','b','c'];
B=[];
for (var i = 0;i<7;i++){
B.push(A[i])
}
我会得到
B=["a", "b", "c", undefined, undefined, undefined, undefined]
相反,我想要
B= ["a","b","c"]
所以我想我需要像
这样的东西for (var i = 0;i<7;i++){
B.push(A[i] "unless A[i] is undefined. Then don't push anything")
}
我如何在Javascript中执行此操作?
答案 0 :(得分:2)
我认为这就是你要搜索的内容:
B = A.filter(function (element) {
return element !== undefined;
});
该代码将复制A过滤掉所有未定义的元素。
答案 1 :(得分:2)
不是迭代数组并将元素一次推送到新数组,而是使用Array.filter函数通常更有效,如下所示:
var B = A.filter(function(item){ return item !== undefined; });
您可能还需要谨慎使用 undefined 。这很容易与其他构造混淆,例如 null 或空字符串。如果在函数中使用“!=”而不是“!==”,那么将过滤掉null或缺少的数组项,以及专门设置为undefined的项。
答案 2 :(得分:1)
您在评论中说明了问题的答案(下次使用//
时,不需要在字符串中插入注释)。
unless A[i] is undefined. Then don't push anything
另一种表达方式是if A[i] is not undefined, then push
。
当这样说时,它会直接转换为代码。
if (A[i] !== undefined)
{
B.push(A[i]);
}
我详细阐述了您的评论,向您展示如何轻松地用一点点努力和时间来解决这些类型的问题。
然而,正如其他人所说,忽略未定义索引的一种更好的方法是简单地迭代到A.length
,但这仅在定义值之间没有未定义值时才有效(这仍然可能案件)。
答案 3 :(得分:1)
面向对象的方面
=&GT;在那段代码之后,清理你的数组:
B.clean();
已知clean是数组Class(OOP context)的扩展
Array.prototype.clean=function(){
var newArray = [];
for(var index = 0; index < this.length; index++) {
if(this[index]) {
newArray.push(this[index]);
}
}
return newArray;
};
答案 4 :(得分:1)
一些ES魔法
[1, 2, undefined].filter(Boolean)
会产生
[1, 2]
答案 5 :(得分:0)
您将使用if语句
for (var i = 0; i < 7; i++){
if (A[i] !== undefined) {
B.push(A[i]);
}
}
答案 6 :(得分:0)
您的问题可以通过从1迭代到array.length或使用for in loop
来解决如果您要处理可能包含未定义元素的数组,例如[0, undefined, 4]
,那么您需要在添加元素之前检查该元素是否已定义。 if(a[i] !== undefined)
会做到这一点。
答案 7 :(得分:0)
您可以使用 compact 功能过滤掉undefined
值:
function compact(col) {
return col.filter(function(val) {
return val !== undefined;
});
}
console.log(compact([false,0,1,null,undefined])); // [false,0,1,null]
JS Bin示例
答案 8 :(得分:0)
你可以添加像
这样的安全措施A[i] && B.push(A[i])
只有在1返回true
时才会推送,但如果A[i]
为0
我建议您查看null
if (A[i] != null) B.push(A[i])
如果你想保持你的第一个for
循环,你可以&#34;清洁&#34;通过使用过滤器后的数组。像:
for (var i = 0; i < 7; i++) {
B.push(A[i])
}
var clean_B = B.filter(function (item) {
return item != null;
});
答案 9 :(得分:0)
缩写:
A = ['a', 'b', 'c'];
B = [];
我认为,OP问题的最接近答案是 this :
for (var i = 0; i < 7; i++) {
if (typeof A[i] !== "undefined") B.push(A[i]);
else continue;
}
或 this 一:
for (elem of A) if (typeof elem !== "undefined") B.push(elem); else continue;
答案 10 :(得分:-1)
使用i < 7
i < A.length
for (var i = 0; i < A.length; i++){
B.push(A[i])
}