5

Как получить все значения свойств объекта JavaScript (не зная ключи)?

12

Заголовок: Как получить значения всех свойств объекта JavaScript, не зная их имена?

Описание проблемы:

У меня есть JavaScript-объект, например:

var objects = { ... };

Этот объект содержит более 50 свойств, и я не знаю их названия (то есть ключи). Как мне в цикле получить каждое значение свойства этого объекта?

Буду признателен за помощь!

5 ответ(ов)

5

Конечно! Вот перевод на русский в стиле ответа на StackOverflow:

Вы можете использовать простой цикл for..in для перебора свойств объекта. Пример кода:

for (var key in objects) {
    var value = objects[key];
}

В данном примере key будет представлять собой имя текущего свойства, а value - его значение. Обратите внимание, что цикл for..in будет перебирать все перечисляемые свойства объекта, включая унаследованные. Если вам нужно перебрать только собственные свойства объекта, рекомендуется использовать метод Object.hasOwnProperty() для фильтрации несущественных свойств:

for (var key in objects) {
    if (objects.hasOwnProperty(key)) {
        var value = objects[key];
        // Ваш код для обработки свойства
    }
}

Также, если вы работаете с массивами, лучше использовать forEach или другие методы массива, такие как map или filter, для итерации.

0

Вот переиспользуемая функция для получения значений объекта в массив. Она также учитывает прототипы.

Object.values = function (obj) {
    var vals = [];
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            vals.push(obj[key]);
        }
    }
    return vals;
}

Эта функция принимает объект obj и возвращает массив его значений. Внутри используется цикл for...in, который перебирает все ключи объекта. Условие obj.hasOwnProperty(key) проверяет, принадлежит ли свойство объекту напрямую, а не его прототипу (что позволяет избежать включения унаследованных свойств). Таким образом, вы получает только собственные значения объекта в результирующем массиве.

0

Если вам действительно нужен массив значений, то я считаю, что следующий способ выглядел бы более чисто, чем создание массива с помощью цикла for ... in.

ECMA 5.1+

function values(o) { return Object.keys(o).map(function(k){return o[k]}) }

Стоит отметить, что в большинстве случаев вам не обязательно нужен массив значений, и будет быстрее сделать так:

for(var k in o) something(o[k]);

Этот код перебирает ключи объекта o. На каждой итерации переменная k принимает значение одного из ключей объекта o.

0

Для получения всех значений из объекта myObj, который объявлен как const myObj = { a: 1, b: 2, c: 3 }, можно использовать несколько способов. Вот краткий обзор наиболее эффективных методов:

  1. Самый короткий способ:
const myValues = Object.values(myObj);

Данный метод возвращает массив значений свойств объекта myObj.

  1. Другой способ с использованием Object.keys():
const myValues = Object.keys(myObj).map(key => myObj[key]);

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

Оба способа являются корректными и могут быть использованы в зависимости от ваших предпочтений. Однако Object.values() является более лаконичным и предпочтительным вариантом для данной задачи.

0

Вы можете пройтись по ключам объекта с помощью цикла for...in:

foo = {one: 1, two: 2, three: 3};
for (key in foo) {
    console.log("foo[" + key + "]=" + foo[key]);
}

Это выведет:

foo[one]=1
foo[two]=2
foo[three]=3

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

foo = {"one": 1, "two": 2, "three": 3};

Также имейте в виду, что при использовании for...in рекомендуется использовать метод hasOwnProperty, чтобы избежать перебора свойств из цепочки прототипов:

for (key in foo) {
    if (foo.hasOwnProperty(key)) {
        console.log("foo[" + key + "]=" + foo[key]);
    }
}

Это гарантирует, что вы работаете только с собственными свойствами объекта.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь