我想知道JavaScript是否有办法做某事
var x = { 'a' : 4, 'b' : -1 };
var y = { 'c' : 0 };
var z = x + y; // { 'a' : 4, 'b' : -1, 'c' : 0 }
滚动我自己的功能或导入库之外。
我想知道的原因是因为我想使用reduce
来获取数组中的唯一值,例如
var arr = [1, 5, 1, 10, 239, -1, 1, 5];
var unique = Object.keys(arr.reduce((prev,cur) => ???, {})).map(key => key); // [1, 5, 10, 239, -1];
我不知道为上面的???
添加什么。
答案 0 :(得分:4)
对于您的第一个示例,它是Object.assign
(这是ES2015中的新功能,但它可以针对较旧的JavaScript引擎进行填充):
var x = { 'a' : 4, 'b' : -1 };
var y = { 'c' : 0 };
var z = Object.assign({}, x, y);
console.log(z); // { 'a' : 4, 'b' : -1, 'c' : 0 }
我想知道的原因是因为我想使用reduce来获取数组中的唯一值,例如
实际上并没有这样做,可以使用重复搜索阵列方法(reduce
可以使用它,但它不会比forEach
更多地为你买单) :
var arr = [1, 5, 1, 10, 239, -1, 1, 5];
var unique = arr.reduce(function(result, entry) {
if (result.indexOf(entry) == -1) {
result.push(entry);
}
return result;
}, []);
console.log(unique);
...或者map-to-object-properties-and-then-the-property-names-at-the-end方法,其中reduce
再次对你没有多大帮助:
var arr = [1, 5, 1, 10, 239, -1, 1, 5];
var unique = Object.keys(arr.reduce(function(result, entry) {
result[entry] = true;
return result;
}, {}));
console.log(unique);
在后者中,你最终会得到字符串而不是数字。当然,您可以通过在末尾添加.map(function(entry) { return +entry; })
将其重新转换为数字。