Javascript根据条件生成逻辑数组

时间:2013-12-17 14:39:18

标签: javascript

来自 matlab 背景,我试图在 Javascript

中复制以下方案
A = [1, 2, 3, 4, 5];
B = 4;
C = A == B;
answer => C = [0, 0, 0, 1, 0]

换句话说,它会生成一个逻辑数组,其中只有比较的值设置为1.我可以使用循环执行此操作,但我想知道在javascript中是否有一个单行解决方案吗?

4 个答案:

答案 0 :(得分: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代码(实验性的)。

答案 1 :(得分:2)

关于你能得到的最高级的是

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

在较新的JavaScript运行时系统中支持。

在JavaScript中,首选包含布尔值的结果数组可能更为惯用:

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

答案 2 :(得分: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()功能)。

答案 3 :(得分: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]