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

时间:2018-07-12 11:44:48

标签: javascript ecmascript-6

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

4 个答案:

答案 0 :(得分:3)

Set是一组值,而不是它们的映射,因此add接受1个参数,它是一个值。您要找的东西是Map

this answer中解释了通过索引获取值的过程,对于SetMap来说都是相同的。应该迭代一个集合,直到达到索引为止。首先可以将其转换为数组,从而降低效率:

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

答案 1 :(得分:1)

JavaScript Set.add()仅采用一个参数。因此,您的第二个参数始终被忽略,而作为其JS,则不会引发任何错误。您可以使用简单的JS对象来实现您想要的功能。

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

然后您将获得如下值:

x[key1] # will output value1

答案 2 :(得分:1)

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)

答案 3 :(得分:0)

您使用的是Set错误。它不是键/值存储,而是唯一值的列表。

Source

您的代码...

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()仅采用一个参数)。

对于通用键/值存储,您应该使用JavaScript对象,最好使用通过null可用的Object.create(null)原型(null原型确保您不会再阅读其他任何内容值返回原型链,而无需进行Object.prototype.hasOwnProperty()检查。