从JSON对象中获取匹配的键值如何操作?

3

我有一个包含以下数据的对象:

obj =
{
  key: 'mykey1597855209',
  integrity: 'sha512-T9JW=='
}
{
  key: 'mykey159785520915978552101597855212',
  integrity: 'sha512-T9JWj=='
}
{
  key: 'mykey15978552091597855210',
  integrity: 'sha512-lcddfd=='
}
{
  key: 'otherkey15978552091597855210',
  integrity: 'sha512-abcdfd=='
}

当我执行console.log(typeof obj)时,输出结果是object

我想要在数组中仅存储具有key value中包含mykey*的键对应的唯一integrity

期望输出:

[ 'sha512-T9JWj==', 'sha512-lcddfd==' ]

代码:

var output = [];

for (var key in obj) {
  if(obj[key] === 'mykey') {
    output.push(obj[integrity])
  }
}

console.log(output.join(', '))

你可以使用正则表达式来匹配模式,而不是使用 ===。 - deepak
好的。还有如何仅获取唯一的“完整性”值? - meallhour
为了确保唯一性,创建一个字典。在这里,字典的键将是“integrity”。 const dict = { } for(var key in obj) { dict[key[integrity]] = key } - deepak
1
你在回答的评论中提到 obj 不是一个数组,你是正确的。它不是一个数组,也不是 "JSON" 或 "JSON 对象"(JSON 总是字符串)。obj 是语法错误。 - crashmstr
1个回答

3

首先使用filter方法从数组中筛选出具有匹配键值的对象,对筛选后的每个元素应用map方法以获得其integrity属性,然后使用这些属性创建一个Set集合,最后使用扩展语法将结果转换为数组。

const arr = [
{
  key: 'mykey1597855209',
  integrity: 'sha512-T9JWj=='
},
{
  key: 'mykey159785520915978552101597855212',
  integrity: 'sha512-T9JWj=='
},
{
  key: 'mykey15978552091597855210',
  integrity: 'sha512-lcddfd=='
},
{
  key: 'otherkey15978552091597855210',
  integrity: 'sha512-abcdfd=='
}];
const res = [...new Set(arr.filter(({key})=>/mykey/.test(key)).map(({integrity})=>integrity))];
console.log(res);


请注意,obj并不是一个array - meallhour
请提供一些有效的样本数据。 - Unmitigated

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接