Массив имен из объекта с объектами - PullRequest
2 голосов
/ 24 января 2020

У меня есть объект, который содержит объекты, например:

{
  "AD": {
    "name": "Andorra",
    "native": "Andorra",
    "phone": "376",
    "continent": "EU",
    "capital": "Andorra la Vella",
    "currency": "EUR",
    "languages": [
      "ca"
    ]
  },
  "AE": {
    "name": "United Arab Emirates",
    "native": "دولة الإمارات العربية المتحدة",
    "phone": "971",
    "continent": "AS",
    "capital": "Abu Dhabi",
    "currency": "AED",
    "languages": [
      "ar"
    ]
  },
  "AF": {
    "name": "Afghanistan",
    "native": "افغانستان",
    "phone": "93",
    "continent": "AS",
    "capital": "Kabul",
    "currency": "AFN",
    "languages": [
      "ps",
      "uz",
      "tk"
    ]
  }
}

Теперь мне нужно получить массив имен ["Andorra", "United Arab Emirates", "Afghanistan"], чтобы я мог отправить эти значения для выбора поля в этом формате:

<q-select color="teal" outlined v-model="model" :options="options" label="Label">
  <template v-slot:append>
  </template>
</q-select>

<script>
export default {
  data () {
    return {
      model: null,

      options: [
        'Google', 'Facebook', 'Twitter', 'Apple', 'Oracle'
      ]
    }
  }
}
</script>

Я пытался преобразовать объект в массив, но это не работает, когда я пытаюсь получить доступ с помощью array.name. Мне просто нужно получить имена от этого объекта объектов. Кто-нибудь знает, как я могу это сделать?

Ответы [ 5 ]

2 голосов
/ 24 января 2020

Вы можете уменьшить объект в массив, сократив ключи и сопоставив имя.

Object.keys(data).reduce((a, k) => [...a, data[k].name], [])

let data = getData();

console.log(Object.keys(data).reduce((a, k) => [...a, data[k].name], []));

function getData() {
  return {
    "AD": {
      "name": "Andorra",
      "native": "Andorra",
      "phone": "376",
      "continent": "EU",
      "capital": "Andorra la Vella",
      "currency": "EUR",
      "languages": [ "ca" ]
    },
    "AE": {
      "name": "United Arab Emirates",
      "native": "دولة الإمارات العربية المتحدة",
      "phone": "971",
      "continent": "AS",
      "capital": "Abu Dhabi",
      "currency": "AED",
      "languages": [ "ar" ]
    },
    "AF": {
      "name": "Afghanistan",
      "native": "افغانستان",
      "phone": "93",
      "continent": "AS",
      "capital": "Kabul",
      "currency": "AFN",
      "languages": [ "ps", "uz", "tk" ]
    }
  };
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
2 голосов
/ 24 января 2020

Также простой способ сделать это

const test = {
  "AD": {
    "name": "Andorra",
    "native": "Andorra",
    "phone": "376",
    "continent": "EU",
    "capital": "Andorra la Vella",
    "currency": "EUR",
    "languages": [
      "ca"
    ]
  },
  "AE": {
    "name": "United Arab Emirates",
    "native": "دولة الإمارات العربية المتحدة",
    "phone": "971",
    "continent": "AS",
    "capital": "Abu Dhabi",
    "currency": "AED",
    "languages": [
      "ar"
    ]
  },
  "AF": {
    "name": "Afghanistan",
    "native": "افغانستان",
    "phone": "93",
    "continent": "AS",
    "capital": "Kabul",
    "currency": "AFN",
    "languages": [
      "ps",
      "uz",
      "tk"
    ]
  }
}

const countries = []
for (obj in test) {
  countries.push(test[obj].name)
}

console.log(countries)
2 голосов
/ 24 января 2020

Используйте Object.keys() и Array.prototype.map() для заполнения нового массива:

const obj = {
  "AD": {
    "name": "Andorra", 
    "native": "Andorra", //...
  },
  "AE": {
    "name": "United Arab Emirates",
    "native": "دولة الإمارات العربية المتحدة", //...
  },
  "AF": {
    "name": "Afghanistan",
    "native": "افغانستان", //...
  }
};


const namesOptions = Object.keys(obj).map(k => obj[k].name);
console.log(namesOptions)
2 голосов
/ 24 января 2020

Вы можете получить значения и имя свойства.

var object = { AD: { name: "Andorra", native: "Andorra", phone: "376", continent: "EU", capital: "Andorra la Vella", currency: "EUR", languages: ["ca"] }, AE: { name: "United Arab Emirates", native: "دولة الإمارات العربية المتحدة", phone: "971", continent: "AS", capital: "Abu Dhabi", currency: "AED", languages: ["ar"] }, AF: { name: "Afghanistan", native: "افغانستان", phone: "93", continent: "AS", capital: "Kabul", currency: "AFN", languages: ["ps", "uz", "tk"] } },
    arrayOfNames = Object.values(object).map(({ name }) => name);

console.log(arrayOfNames);
0 голосов
/ 24 января 2020

Вы можете сделать это так

var obj = {
  "AD": {
    "name": "Andorra",
    "native": "Andorra",
    "phone": "376",
    "continent": "EU",
    "capital": "Andorra la Vella",
    "currency": "EUR",
    "languages": [
      "ca"
    ]
  },
  "AE": {
    "name": "United Arab Emirates",
    "native": "دولة الإمارات العربية المتحدة",
    "phone": "971",
    "continent": "AS",
    "capital": "Abu Dhabi",
    "currency": "AED",
    "languages": [
      "ar"
    ]
  },
  "AF": {
    "name": "Afghanistan",
    "native": "افغانستان",
    "phone": "93",
    "continent": "AS",
    "capital": "Kabul",
    "currency": "AFN",
    "languages": [
      "ps",
      "uz",
      "tk"
    ]
  }
};

var values = Object.keys(obj).map(value=> obj[value].name);

console.log(values);
...