2017-06-22 61 views
1

有沒有一種方法來填充內部條件的數組?Javascript與IF語句填充數組

例如

cars = [ 
    {id:1,color:'red'}, 
    {id:2,color:'blue'}, 
    {id:3,color:'blue'} 
] 

我需要創建一個新的數組,將得到ID的值和一個新的字段,其是類型。

if color = red, type = 1, else type = 0. 

我試過這個,但它不適用於JavaScript。

var newArray = [ 
    for(var car in cars){ 
     newId: car.id, 
     if(car.color == 'red'){ 
      type: '1', 
     else 
      type: '0' 
    } 
] 

的返回值應該是

newArray = [ 
     {newId:1,type:'1'}, 
     {newId:2,type:'0'}, 
     {newId:3,type:'0'} 
] 

請幫助

+0

錯了對象:汽車= [ [ID:1,顏色:紅色], [ID: 2,顏色:藍色], [id:3,color:blue] ]; – binariedMe

+0

您的數組/對象語法不正確。每個汽車入口應該看起來像'{id:1,color:'red'}' – Phil

+1

如果新對象'type'屬性是數字'1'或'0',或者字符串''1「'或' 「0」'?你的問題顯示了兩種方式。 *「不介意這只是一種表示形式的語法」* - 爲什麼你不會使用所有答案中顯示的標準JS對象文字語法? – nnnnnn

回答

4

您可以輕鬆地map你原來的數組到一個新的

const cars = [{"id":1,"color":"red"},{"id":2,"color":"blue"},{"id":3,"color":"blue"}] 
 

 
const newArray = cars.map(car => ({ 
 
    newId: car.id, 
 
    type: car.color === 'red' ? '1' : '0' 
 
})) 
 

 
console.info(newArray)


如果需要支持IE,這將在V9之前工作的IE瀏覽器+

var newArray = cars.map(function(car) { 
    return { 
    newId: car.id, 
    type: car.color === 'red' ? '1' : '0' 
    } 
}) 

版本9不支持Array.prototype.map。如果您需要支持這些,請參見pollyfill

+0

酷!這一個是最好的答案,爲我工作。我會遵循這一點。非常感謝。 –

+1

不客氣:) – Phil

+0

hi phil,如果可以將if語句寫成字符串,將可能嗎?因爲我需要將此應用於字符串問題。我只是用一個小樣本來表示我的問題 –

1

我相信這是你在找什麼:

var newArray = []; 
for(var car in cars) { 
    var obj = {newId: car.id}; 
    if(car.color === 'red') { 
     obj['type'] = '1'; 
    } else { 
     obj['type'] = '0'; 
    } 
    newArray.push(obj); 
} 
1

定的數組是錯誤的,如果你的陣列是這樣的:

cars =[ 
    {id:1,color:"red"}, 
    {id:2,color:"blue"}, 
    {id:3,color:"blue"} 
]; 

,那麼你應該這樣做:

var newArray = cars.map((car) => { let type; if(car.color === "blue") type = 1; else type = 0; return { id: car.id, color: car.color, type }}) 
+1

這會修改原始值。看起來不像OP想要那樣做 – Phil

+0

@Phil同意了。代碼已更新。 – binariedMe

0

試試這個,而不是你的代碼:

 var newArray = []; 
     for(var car in cars){ 
     if(car.color == 'red'){ 
      newArray.push({newId: car.id,type: '1'}); 
      } else { 
       newArray.push({newId: car.id,type: '0'}); 
      } 
     } 
+0

對不起,第二個應該是type = 0 – YCotov

0

這就是數組映射函數的用途,您可以從另一個數組創建。

然而,你的陣列是錯誤的,它在下面的代碼被糾正:您所指定

cars =[ 
    {id:1,color:'red'}, 
    {id:2,color:'blue'}, 
    {id:3,color:'blue'} 
] 
newCarArray=cars.map(function(car){ 
    if(car.color =='red'){ 
     return {newId:car.id, type:1} 
    } 
    return {newId:car.id, type:0} 
}) 
console.log (newCarArray)