有没有办法在JavaScript中使用map/ reduce/ filter/ etc a Set或者我必须自己编写?
这是一些合理的Set.prototype扩展
Set.prototype.map = function map(f) {
var newSet = new Set();
for (var v of this.values()) newSet.add(f(v));
return newSet;
};
Set.prototype.reduce = function(f,initial) {
var result = initial;
for (var v of this) result = f(result, v);
return result;
};
Set.prototype.filter = function filter(f) {
var newSet = new Set();
for (var v of this) if(f(v)) newSet.add(v);
return newSet;
};
Set.prototype.every = function every(f) {
for (var …Run Code Online (Sandbox Code Playgroud) 我有一个对象数组,如下所示:
var array = [
{id:123, value:"value1", name:"Name1"},
{id:124, value:"value2", name:"Name1"},
{id:125, value:"value3", name:"Name2"},
{id:126, value:"value4", name:"Name2"}
...
];
Run Code Online (Sandbox Code Playgroud)
如您所见,有些名称会重复出现.我想获得一个只有名字的新数组,但是如果某些名称重复,我不想再添加它.我想要这个数组:
var newArray = ["Name1", "Name2"];
Run Code Online (Sandbox Code Playgroud)
我正在尝试这样做map:
var newArray = array.map((a) => {
return a.name;
});
Run Code Online (Sandbox Code Playgroud)
但问题是这会返回:
newArray = ["Name1", "Name1", "Name2", "Name2"];
Run Code Online (Sandbox Code Playgroud)
我怎样才能在里面设置一些条件map,所以它不会返回已经存在的元素?我想用map或其他一些ECMAScript 5或ECMAScript 6功能.
文档:https://developer.mozilla.org/en-US/docs/Web/API/FileList
为什么是FileList对象而不是数组?它拥有的唯一属性是它.length唯一的方法.item(),即冗余(fileList[0] === fileList.item(0)).
SpreadElement[Yield]:
...AssignmentExpression[In, ?Yield]
Run Code Online (Sandbox Code Playgroud)
这与Spread语法相同
扩展语法允许在可能需要零个或多个参数(用于函数调用)或元素(用于数组文字)的位置扩展数组表达式或字符串等可迭代的值,或者在零或更多的位置扩展对象表达式键值对(对象文字)是预期的.
句法
对于函数调用:
Run Code Online (Sandbox Code Playgroud)myFunction(...iterableObj);对于数组文字:
Run Code Online (Sandbox Code Playgroud)[...iterableObj, 4, 5, 6]
在MDN文档中描述?
什么是SpreadElement和/或扩展语法的用例; 如果SpreadElement和传播语法不同,它们的具体方式有何不同?
在另一个问题中,这是在那里:
var a = {};
a.products = [...document.querySelectorAll('.product')];
console.log(a.products);Run Code Online (Sandbox Code Playgroud)
Edge将失败,并显示以下错误:
功能预期
但这是有效的:
<div class="product"> </div>Run Code Online (Sandbox Code Playgroud)
为什么不是顶级的工作在Edge(它在Chrome上)?
我正在尝试从服务器发送一个Set()对象。但从客户端我得到一个空对象。socket.ionode.js
//server side
var set=new Set([1,2,3]);
socket.emit('set', set);
console.log(set); //Set(3) {1,2,3}
Run Code Online (Sandbox Code Playgroud)
//client side
socket.on('set',function(set){
console.log(set); //{}
});
Run Code Online (Sandbox Code Playgroud)
这是为什么 ?
我最近将一些使用常规对象作为映射的代码转换为新的 es6Map类。我很快就遇到了一个问题,虽然Map该类包含一个forEachlike Array,但它不包含一个some方法以及许多其他Array.prototype方法。
为了提供一些上下文,带有常规 JS 对象的原始代码如下所示:
var map = {
entry1: 'test',
entry2: 'test2'
};
Object.keys(map).some(key => {
var value = map[key];
// Do something...found a match
return true;
});
Run Code Online (Sandbox Code Playgroud)
的Map类不包括一个entries方法,但遗憾的是此返回一个Iterator对象。这也不包括访问这些Array.prototype方法的任何简单方法。
我很好奇是否有一种干净的方法可以做到这一点,或者我是否在咆哮错误的树。