Как получить объект в массиве по одному из его свойств? - PullRequest
0 голосов
/ 22 ноября 2018

В Javascript, как получить объект в массиве по одному из его свойств?

Привет всем, давайте предположим, что у нас есть следующее:

   "Attributes":[
       {
           "Name":"Brief",
           "Value":"This skirt was fabriced from ...."
       },
       {
           "Name":"Details",
           "Value":"Measurements and Pictures are real"
       },
       {
           "Name":"SKUNumber",
           "Value":"12345678"
       }
   ]

Что мне нужносделать, чтобы получить значение «Значение» на основе «Имя» ..

Например:

console.log(Attributes.Brief)   ==> "This skirt was fabriced from ...."

Так что мне нужна функция, чтобы помочь сделать это

Обратите внимание, что я не хочу использовать индекс объекта, потому что его порядок может измениться.

Спасибо

Ответы [ 4 ]

0 голосов
/ 22 ноября 2018

Вы можете использовать функцию поиска javascript, см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find, см. Ниже пример кода:

 var Attributes =[
               {
                   "Name":"Brief",
                   "Value":"This skirt was fabriced from ...."
               },
               {
                   "Name":"Details",
                   "Value":"Measurements and Pictures are real"
               },
               {
                   "Name":"SKUNumber",
                   "Value":"12345678"
               }
           ]

            var found = Attributes.find(function(element) {
              return element.Name == "Details";
            });

console.log(found.Value); //output : Measurements and Pictures are real
0 голосов
/ 22 ноября 2018

Ну, всегда лучше показать, что вы пытались, чем просто спросить.

Вы можете использовать Array.find, чтобы достичь этого

let Attributes = [
                     {
                        "Name":"Brief",
                        "Value":"This skirt was fabriced from ...."
                     },
                     {
                        "Name":"Details",
                        "Value":"Measurements and Pictures are real"
                     },
                     {
                        "Name":"SKUNumber",
                        "Value":"12345678"
                     }
                  ]
                  
function getValueByName(name) {
  return Attributes.find(d => d.Name.toLowerCase() == name.toLowerCase()).Value
}

console.log(getValueByName('Brief'))
console.log(getValueByName('details'))
console.log(getValueByName('SKUNumber'))
0 голосов
/ 22 ноября 2018

Для ключа можно использовать Proxy, который возвращает находку объекта со значением.

var object = { attributes: [{ Name: "Brief", Value: "This skirt was fabriced from ...." }, { Name: "Details", Value: "Measurements and Pictures are real" }, { Name: "SKUNumber", Value: "12345678" }] },
    attributes = new Proxy(
        object.attributes,
        { get: (array, prop) => (array.find(({ Name }) => Name === prop) || {}).Value }
    );
   
console.log(attributes.Brief);
console.log(attributes.SKUNumber);
0 голосов
/ 22 ноября 2018

Один из вариантов - использовать Array.prototype.filter:

const d = [{
    "Name": "Brief",
    "Value": "This skirt was fabriced from ...."
  },
  {
    "Name": "Details",
    "Value": "Measurements and Pictures are real"
  },
  {
    "Name": "SKUNumber",
    "Value": "12345678"
  }
]

console.log(d.filter(x=>x.Name==="Brief")[0].Value)

Вы также можете сделать его более общим:

const d = [{
    "Name": "Brief",
    "Value": "This skirt was fabriced from ...."
  },
  {
    "Name": "Details",
    "Value": "Measurements and Pictures are real"
  },
  {
    "Name": "SKUNumber",
    "Value": "12345678"
  }
]

const getValOfXfromArrByValOfY = (arr, x, y, val) => arr.find(z => z[y] === val)[x]

console.log(getValOfXfromArrByValOfY(d, 'Value', 'Name', 'SKUNumber'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...