相关疑难解决方法(0)

如何在JavaScript中映射/缩小/过滤Set?

有没有办法在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)

javascript reduce set ecmascript-6

100
推荐指数
3
解决办法
3万
查看次数

如果元素中已存在元素,请不要再次添加

我有一个对象数组,如下所示:

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功能.

javascript arrays

97
推荐指数
7
解决办法
6万
查看次数

为什么FileList对象不是数组?

文档:https://developer.mozilla.org/en-US/docs/Web/API/FileList

为什么是FileList对象而不是数组?它拥有的唯一属性是它.length唯一的方法.item(),即冗余(fileList[0] === fileList.item(0)).

javascript

53
推荐指数
4
解决办法
2万
查看次数

ECMAScript文档中的SpreadElement是什么?它与MDN上的Spread语法相同吗?

ECMAScript规范SpreadElement描述

SpreadElement[Yield]:
...AssignmentExpression[In, ?Yield]
Run Code Online (Sandbox Code Playgroud)

这与Spread语法相同

扩展语法允许在可能需要零个或多个参数(用于函数调用)或元素(用于数组文字)的位置扩展数组表达式或字符串等可迭代的值,或者在零或更多的位置扩展对象表达式键值对(对象文字)是预期的.

句法

对于函数调用:

myFunction(...iterableObj);
Run Code Online (Sandbox Code Playgroud)

对于数组文字:

[...iterableObj, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

MDN文档中描述?

什么是SpreadElement和/或扩展语法的用例; 如果SpreadElement和传播语法不同,它们的具体方式有何不同?

javascript ecmascript-6 spread-syntax

42
推荐指数
1
解决办法
3733
查看次数

为什么MS Edge不使用spread元素和querySelector?

在另一个问题中,这是在那里:

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上)?

javascript ecmascript-6 microsoft-edge

12
推荐指数
1
解决办法
1093
查看次数

无法通过node.js中的socket.io发送Set()对象

我正在尝试从服务器发送一个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)

这是为什么 ?

javascript set node.js socket.io

6
推荐指数
1
解决办法
594
查看次数

在 es6 Map 上调用 `Array.prototype.some()` 的更好方法

我最近将一些使用常规对象作为映射的代码转换为新的 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方法的任何简单方法。

我很好奇是否有一种干净的方法可以做到这一点,或者我是否在咆哮错误的树。

javascript arrays ecmascript-6 es6-map

5
推荐指数
1
解决办法
1971
查看次数