相关疑难解决方法(0)

如何知道两个数组是否具有相同的值

我有这两个数组:一个填充来自ajax请求的信息,另一个存储用户点击的按钮.我使用这段代码(我填写了样本号):

var array1 = [2, 4];
var array2 = [4, 2]; //It cames from the user button clicks, so it might be disordered.
array1.sort(); //Sorts both Ajax and user info.
array2.sort();
if (array1==array2) {
    doSomething();
}else{
    doAnotherThing();
}
Run Code Online (Sandbox Code Playgroud)

但它始终给出false,即使两个数组相同,但名称不同.(我在Chrome的JS控制台中查看了这个).那么,有什么方法可以知道这两个数组是否包含相同的数据?它为什么要给予false?我如何知道第一个数组中的哪些值不在第二个数组中?

javascript arrays compare

84
推荐指数
9
解决办法
11万
查看次数

在迭代器上使用map()

假设我们有一个Map : let m = new Map();, using m.values()返回一个map迭代器.

但是我不能使用forEach()或者map()在那个迭代器上并且在迭代器上实现while循环看起来像反模式,因为ES6提供了类似的功能map().

那么有没有办法map()在迭代器上使用?

javascript syntax dictionary iterator ecmascript-6

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

对象属性名称为数字

根据官方JavaScript文档,您可以使用整数定义对象文字属性名称:

此外,您可以使用数字或字符串文字作为属性的名称.

像这样:

me = {
    name: "Robert Rocha",
    123: 26,
    origin: "Mexico"
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,你如何引用具有整数作为名称的属性?我试过平常me.123但得到了一个错误.我能想到的唯一解决方法是使用for-in循环.有什么建议?

javascript object

50
推荐指数
4
解决办法
5万
查看次数

在Javascript中覆盖等价比较

是否可以在Javascript中覆盖等价比较?

我得到的最接近的解决方案是定义valueOf函数并在对象前面用一个加号调用valueOf.

这有效.

equal(+x == +y, true);
Run Code Online (Sandbox Code Playgroud)

但这失败了.

equal(x == y, true, "why does this fail.");
Run Code Online (Sandbox Code Playgroud)

这是我的测试用例.

var Obj = function (val) {
    this.value = val;
};
Obj.prototype.toString = function () {
    return this.value;
};
Obj.prototype.valueOf = function () {
    return this.value;
};
var x = new Obj(42);
var y = new Obj(42);
var z = new Obj(10);
test("Comparing custom objects", function () {
    equal(x >= y, true);
    equal(x <= y, true);
    equal(x >= z, true);
    equal(y >= z, true); …
Run Code Online (Sandbox Code Playgroud)

javascript operator-overloading qunit

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

为什么不使用等式检查数组

我开始时:

"1:2".split(':') == ["1","2"]; 
// false
Run Code Online (Sandbox Code Playgroud)

然后尝试:

[1,2] == [1,2];
// false
Run Code Online (Sandbox Code Playgroud)

最终:

[] == []; 
// false
Run Code Online (Sandbox Code Playgroud)

我发现了:

"1:2".split(':').toString() == [1,2].toString();
// true
Run Code Online (Sandbox Code Playgroud)

所以我已经解决了我的初始问题(种类),但为什么数组不能相互匹配?

javascript

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

在ES6中存储数组设置并按值访问它们

有一种简单的方法可以验证ES6 Set是否包含特定数组的值?我想要一个不需要我使用引用的解决方案:

var set = new Set();

var array = [1, 2];
set.add(array);
set.has(array); // true

set.add([3, 4]);
set.has([3, 4]); // false
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的解决方案是将所有内容存储为字符串,但这很烦人:

set.add([3, 4].toString());
set.has([3, 4].toString()); // true
Run Code Online (Sandbox Code Playgroud)

javascript arrays set ecmascript-6

9
推荐指数
3
解决办法
4222
查看次数

JS - 在对象数组中使用 Set()

如何在对象中使用 Set()?我阅读了文档,它适用于数组中的值,但不适用于对象。为什么?我想避免具有完全相同值的重复项。

let nameList_one = [{ name: 'harry', id: 1 }, { name: 'john', id: 2 }, { 'name': 'trevor', id: 3  }]
let nameList_two = [{ name: 'harry', id: 1  }, { name: 'ron', id: 4  }, { name: 'jackson', id: 5  }]

let fullNameList = [...nameList_one , ...nameList_two ]

let filteredList = [...new Set(fullNameList)] // the output is the merge of two array, duplicating "harry".
Run Code Online (Sandbox Code Playgroud)

输出:

[{ name: 'harry', id: 1 }, { name: 'john', id: 2 }, …

javascript arrays ecmascript-6

6
推荐指数
2
解决办法
9733
查看次数

TypeScript:地图的键(对象)不起作用

在检查地图是否已经具有对象作为键时遇到一些麻烦。

例如

const myMap: Map<MyObject1, MyObject2> = new Map<MyObject1, MyObject2>();
Run Code Online (Sandbox Code Playgroud)

我还在MyObject1类中定义了一个equals函数

equals(other: ThreatAgentMgm): boolean {
    return other.id === this.id;
}
Run Code Online (Sandbox Code Playgroud)

myMap.has(myObject1)总是错误的。我读了has方法基于===运算符,我应该在MyObject1类中定义其他内容吗?

dictionary equality typescript

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

Map/Set维护唯一的数组数组,Javascript

我正在尝试构建唯一的数组数组,这样每当我有新数组添加它时,只应添加它,如果它不存在于集合中

例如,存储[1,1,2]的所有唯一排列

实际:[[1,1,2],[1,2,1],[1,1,2],[1,2,1],[2,1,1],[2,1,1]]
预期:[[1,1,2],[1,2,1],[2,1,1]]

我试过的方法:

  1. Array.Filter:不起作用,因为数组是对象,每个值uniqueArrComparer都是对该数组元素的唯一对象引用.
function uniqueArrComparer(value, index, self) {
  return self.indexOf(value) === index;
}

result.filter(uniqueArrComparer)
Run Code Online (Sandbox Code Playgroud)
  1. 设置/映射:我认为我可以构建一个唯一的数组,但它不起作用,因为Set内部使用了严格的相等比较器(===),它将在这种情况下将每个数组视为唯一.
    我们无法为JavaScript Set自定义对象相等性

  2. 将每个数组元素作为字符串存储在Set/Map/Array中,并构建一个唯一字符串数组.在最后使用唯一字符串数组构建数组数组.这种方法可行,但看起来不是有效的解决方案.

工作方案使用Set

let result = new Set();

// Store [1,1,2] as "1,1,2"
result.add(permutation.toString());

return Array.from(result)
  .map(function(permutationStr) {

    return permutationStr
      .split(",")
      .map(function(value) {

        return parseInt(value, 10);
      });
  });
Run Code Online (Sandbox Code Playgroud)

这个问题比任何应用程序问题更像是一种学习练习.

javascript arrays unique set filter

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

JavaScript中对数组的布尔运算

使用ES6集,我可以这样做:

let ints = new Set([1,2,3])
console.log(ints.has(3))
Run Code Online (Sandbox Code Playgroud)

而且它打印true,因为3 在集合.

但阵列怎么样?例如

let coordinates = new Set([[1,1], [1,2], [2,0]])
console.log(coordinates.has([1,2]))
Run Code Online (Sandbox Code Playgroud)

这打印false.

正如您在此CodePen演示中所看到的

因此,在没有首先将坐标转换为字符串(例如['1,1', '1,2', '2,0'])的情况下,我如何处理集合中的数组,就像数组是可以清除的一样?

javascript arrays ecmascript-6

3
推荐指数
1
解决办法
50
查看次数