2017-05-07 235 views
0

我想仅在其他阵列中存在空元素时才从阵列中删除元素。我有这样的:根据另一个阵列的空元素从阵列中删除元素

var fruits = ["Banana", "Naranja", "Manzana", "Mango", "Fresa", "Limón", "Lima", "Sandia"]; 
 
var vegetales = ["", "Ajo", "", "Cebolla", "Tomate", "", "", "Zanahoria"]; 
 
    
 
// The output should be this: 
 
// ["Naranja", "Mango", "Fresa", "Sandia"] 
 
function myFunction() { 
 
    for (var i in vegetales) { 
 
    if (vegetales[i] == '') { 
 
     frutaAeliminar = fruits[i]; 
 
     indexFruta = fruits.indexOf(frutaAeliminar); 
 
     if (indexFruta != -1) { 
 
     fruits.splice(indexFruta, 1) 
 
     } 
 
    } 
 
    } 
 
    console.log(fruits); 
 
} 
 

 
myFunction();

回答

1

我想你会混淆起来,因为你在循环时改变了数组的长度。该解决方案使用第三个数组将结果推送到不更改原始数组。

此外,几个简单的提示:

  1. 使用for...in仅用于遍历对象的键/值pairs--以其他方式使用标准for循环。
  2. 不要忘记声明你的变量w/a var声明 - 否则你会污染全局命名空间。

var fruits = ["Banana", "Naranja", "Manzana", "Mango", "Fresa", "Limón", "Lima", "Sandia"]; 
 
var vegetales = ["", "Ajo", "", "Cebolla", "Tomate", "", "", "Zanahoria"]; 
 

 
var i; 
 

 
var outputArr = []; 
 

 
// The output should be this: 
 
// ["Naranja", "Mango", "Fresa", "Sandia"] 
 

 
function myFunction() { 
 
    for (i=0; i<vegetales.length; i++) { 
 
    if (vegetales[i] !== '') { 
 
     outputArr.push(fruits[i]); 
 
    } 
 
    } 
 
    console.log(outputArr); 
 
} 
 

 
myFunction();

+0

感谢anied,你的答案是,我很清楚。 – CarMoreno

1

简单的解决方案:

var fruits = ["Banana", "Naranja", "Manzana", "Mango", "Fresa", "Limón", "Lima", "Sandia"]; 
var vegetales = ["", "Ajo", "", "Cebolla", "Tomate", "", "", "Zanahoria"]; 
var result = []; 
for(var i = 0;i<fruits.length;i++){ 
    if(vegetales[i]!=""){ 
     result.push(fruits[i]); 
    } 
} 
console.log(result); 

输出:

["Naranja", "Mango", "Fresa", "Sandia"] 

运行位置:

var fruits = ["Banana", "Naranja", "Manzana", "Mango", "Fresa", "Limón", "Lima", "Sandia"]; 
 
var vegetales = ["", "Ajo", "", "Cebolla", "Tomate", "", "", "Zanahoria"]; 
 
var result = []; 
 
for(var i = 0;i<fruits.length;i++){ 
 
\t if(vegetales[i]!=""){ 
 
\t \t result.push(fruits[i]); 
 
\t } 
 
} 
 
console.log(result);

N.B:即可进行修改。

2

例使用ES6

使用Array.filter和三元使用&&允许,如果不需要的话

const fruits = ["Banana", "Naranja", "Manzana", "Mango", "Fresa", "Limón", "Lima", "Sandia"]; 
 
const vegetales = ["", "Ajo", "", "Cebolla", "Tomate", "", "", "Zanahoria"]; 
 

 
/* only pick if corresponding array item does not equal '' */ 
 
const newArray = fruits.filter((fruit, idx) => (vegetales[idx] !== '' && fruit)) 
 

 
console.log(newArray)
012我们不 else打扰

2

您可以使用相应的vegetales项目的真值进行过滤。

var fruits = ["Banana", "Naranja", "Manzana", "Mango", "Fresa", "Limón", "Lima", "Sandia"]; 
 
    vegetales = ["", "Ajo", "", "Cebolla", "Tomate", "", "", "Zanahoria"], 
 
    newArray = fruits.filter((_, i) => vegetales[i]); 
 

 
console.log(newArray)

+0

油滑 - 减少我更多! –