如何从 JavaScript 中的“Set”对象获取单个键值?

问题描述 投票:0回答:5

我有带有三个键值的 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);

javascript ecmascript-6
5个回答
7
投票

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


2
投票

Javascript

Set.add()
仅采用一个参数。所以你的第二个参数总是被忽略,并且作为它的 JS,这不会抛出任何错误。您可以使用简单的 JS 对象来实现您正在尝试的目标。

var x = {}
x[key1] = value1
x[key2] = value2

然后你可以获得如下值:

x[key1] # will output value1

1
投票

您使用了

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 对象

您可以使用常规 JS 对象,因为您的键是字符串,最好通过

null
提供
Object.create(null)
原型(
null
原型确保您不会在原型链上读回任何其他值,而不必进行
Object.prototype.hasOwnProperty()
检查)。


0
投票

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)


0
投票

因为 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
© www.soinside.com 2019 - 2024. All rights reserved.