2013-12-17 127 views
0

MATLAB背景編輯,我試圖複製以下情形中的Javascript的Javascript基於條件

A = [1, 2, 3, 4, 5]; 
B = 4; 
C = A == B; 
answer => C = [0, 0, 0, 1, 0] 

換句話說邏輯陣列,它生成一個邏輯陣列,其中只有值比較設置爲1.我可以使用循環做到這一點,但我想知道是否有一個1班輪解決這個在JavaScript?

+2

沒有沒有。 JavaScript不是那種編程語言。然而,Array原型上有'.filter()'函數。 (Well'.map()';沒有足夠的咖啡:) – Pointy

回答

2

關於你能拿將

var C = A.map(function(v) { return v == B ? 1 : 0; }); 

這是在新的JavaScript運行時系統支持的最高檔。

在JavaScript它很可能是更地道更喜歡包含布爾值的結果數組:

var C = A.map(function(v) { return v == B; }); 
4

可以使用map()功能做類似的事情是什麼,你正在尋找:

var A = [1, 2, 3, 4, 5]; 
var B = 4; 
var C = function (x) { return +(x === B); }; 
var answer = A.map(C); 

var C = x => +(x === B);看起來更乾淨,但這是ES6代碼(實驗)。

+0

+1使用一元'+' –

2

這裏沒有一個班輪,但使用Array.map可以讓你很接近你想要什麼:

var a = [1, 2, 3, 4, 5]; 
var b = 4; 
var c = a.map(function(item) { return item === b? 1: 0; }); 

console.log(c); 

Fiddle

注意地圖不被舊版本瀏覽器的支持下,MDN鏈接上面有polyfil代碼,或者你可以包含任何數量的提供等價物的庫(例如,jQuery具有.map()函數)。

+0

感謝您指出它只支持在較新的瀏覽器 – dopplesoldner

1

你可以寫自己的函數:

function equals(a, b) { 
    var result = []; 
    while (result.length < a.length) { 
     result.push(+(a[result.length] == b)); 
    } 
    return result; 
} 

var A = [1, 2, 3, 4, 5]; 
var B = 4; 
var C = equals(A, B); // [0, 0, 0, 1, 0]