Как извлечь совпадающие значения ключа из объекта JSON?

#javascript #node.js #arrays #dictionary

#javascript #node.js #массивы #словарь

Вопрос:

У меня есть объект со следующими данными:

 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 в качестве выходных данных

Я хочу хранить только уникальные integrity значения в массиве для ключей, которые имеют mykey* в key value

Желаемый результат:

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

Код:

 var output = [];

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

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

Комментарии:

1. вы можете использовать регулярное выражение для сопоставления с шаблоном, а не === .

2. хорошо. также как получить только уникальное integrity значение?

3. для обеспечения уникальной целостности создайте словарь. Здесь ключом словаря будет целостность. const dict = { } for(var ключ в obj) { dict[ключ[целостности]] = ключ}

4. Вы упоминаете в комментарии к ответу, который obj не является массивом. Вы правы. Это не массив. Это также не «JSON» или «Объект JSON» (JSON всегда был и всегда будет строкой). obj это синтаксическая ошибка.

Ответ №1:

Сначала вы filter обрабатываете массив, чтобы получить только объекты с соответствующим значением ключа, map каждому результирующему элементу присваиваете его integrity свойство, создаете Set из этого массива и, наконец, используете синтаксис spread для получения результата в виде массива.

 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);  

Комментарии:

1. пожалуйста, обратите внимание, что obj это не array

2. Тогда, пожалуйста, предоставьте несколько допустимых выборочных данных.