来自 matlab 背景,我试图在 Javascript
中复制以下方案A = [1, 2, 3, 4, 5];
B = 4;
C = A == B;
answer => C = [0, 0, 0, 1, 0]
换句话说,它会生成一个逻辑数组,其中只有比较的值设置为1.我可以使用循环执行此操作,但我想知道在javascript中是否有一个单行解决方案吗?
答案 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);
旧浏览器不支持注释地图,上面的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]