我有带有三个键值的 Set() 对象
var myset =new Set();
myset.add('first','This is first value');
myset.add('second','This is second value');
myset.add('third','This is third value');
使用循环我可以得到这三个键的值
for( var value of myset){
console.log(value);
}
如何获得个人价值?我想获得第二把有价值的钥匙?
有什么选择吗?
我已经尝试过这些但不起作用
myset.get('second');
myset(1);
var myset = new Set();
myset.add('first', 'This is first value');
myset.add('second', 'This is second value');
myset.add('third', 'This is third value');
// Using loop I can got value of these three key
for (var value of myset) {
console.log(value);
}
// How can get individual value? I want to get second key of value?
// I have tried these but not working
myset.get('second');
myset(1);
Set
是一组值,而不是它们的映射,因此 add
接受 1 个参数,即一个值。您要找的东西是Map
。
通过索引获取值在这个答案中进行了解释,对于
Set
和Map
都是相同的。应迭代集合直到达到索引。通过首先将其转换为数组,可以以效率较低的方式完成此操作:
const map = new Map();
map.set('first','This is first value');
map.set('second','This is second value');
map.set('third','This is third value');
console.log(map.get('second') === 'This is second value'); // true
console.log([...map.values()][1] === 'This is second value'); // true
Javascript
Set.add()
仅采用一个参数。所以你的第二个参数总是被忽略,并且作为它的 JS,这不会抛出任何错误。您可以使用简单的 JS 对象来实现您正在尝试的目标。
var x = {}
x[key1] = value1
x[key2] = value2
然后你可以获得如下值:
x[key1] # will output value1
您使用了
Set
错误。它不是键/值存储,而是唯一值的列表。
您的代码...
var myset =new Set();
myset.add('first','This is first value');
myset.add('second','This is second value');
myset.add('third','This is third value');
实际上是创建一组值
"first", "second", "third"
(第二个参数被忽略,因为Set.prototype.add()
只接受一个参数)。
对于通用键/值存储,您应该使用 Map 或常规 JavaScript 对象(取决于您支持的环境)。
映射允许您存储键/值对,其中键可以是任何类型。这与常规 JS 对象不同,后者的键必须是字符串类型。
const myMap = new Map();
myMap.set('key', 'value');
您可以使用常规 JS 对象,因为您的键是字符串,最好通过
null
提供 Object.create(null)
原型(null
原型确保您不会在原型链上读回任何其他值,而不必进行 Object.prototype.hasOwnProperty()
检查)。
Set.add 只带一个参数。你可以做的是,插入 JSON 对象,如下所示:
var myset = new Set();
myset.add({'first' : 'This is first value'});
myset.add({'second': 'This is second value'});
myset.add({'third':'This is third value'});
var val = [...myset].filter(x => x.hasOwnProperty('first'))[0]['first'];
console.log(val)
因为 Set 对象是作为生成器实现的,所以不可能立即通过索引获取其值,尽管有两种选择可以实现这一点。
1.- 解压 Set 生成器并通过索引检索值。
function list(setobj) {
var result = []
for (var value of setobj){
result.push(value)
}
return result
}
asd = new Set([1,2,3,3,4,4])
list(asd.values())[1]
// 2
2.-实现你自己的 Set 子类化数组
function set(){
var args = arguments
if (arguments[0] instanceof Array) {
args = arguments[0]
}
for (var index in args){
self.add(args[index])
}
}
set.prototype = new Array
set.prototype.add = function (el) {
if (this.indexOf(el) == -1) this.push(el)
}
asd = new set(1,1,1,2,2,3)
console.log(asd[1])
// 2
asd = new set([1,1,1,2,2,3])
console.log(asd[1])
// 2