2017-05-07 291 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

油滑 - 減少我更多! –