Альтернативный вариант для объекта.значения()

Я'м ищу альтернативный вариант для объекта.значений функции ()`. Как описано здесь функция не поддерживается в браузере.

При выполнении в следующем примере кода:

var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]

Это работает в Firefox и Chrome, но выдает следующую ошибку в IE11:

объект не'имущественная поддержка T или метод и"ценностей"и

Здесь вы можете проверить это: [скрипка][2].

Итак, что бы быстро исправить?

Решение

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

в

var obj = { foo: 'bar', baz: 42 };
var values = Object.keys(obj).map(function(e) {
  return obj[e]
})

console.log(values)

в

С ЕС6 вы можете написать это в одну строку, используя стрелки-функции.

var values = Object.keys(obj).map(e => obj[e])
Комментарии (2)

Объект.значения() является частью ES8(июнь 2017) спецификация. Используя Кордова, я понял, что в Android 5.0 объект WebView не'т поддерживать его. Итак, я сделал следующее, создание функции полифилл, только если эта функция не поддерживается:

if (!Object.values) Object.values = o=>Object.keys(o).map(k=>o[k]);
Комментарии (0)

Поскольку объект является (не так) последние реализации, если вы хотите поддерживать все браузеры (АКА IE8 и ниже), то вам нужно создать свою собственную функцию:

function objectValues(obj) {
    var res = [];
    for (var i in obj) {
        if (obj.hasOwnProperty(i)) {
            res.push(obj[i]);
        }
    }
    return res;
}

ЗЫ: только заметил, что с ECMAScript 6 тег. Кстати я оставлю этот ответ здесь, просто на случай, если кому-то это нужно.

Комментарии (0)

Вы можете использовать полифилл:

в

const valuesPolyfill = function values (object) {
  return Object.keys(object).map(key => object[key]);
};

const values = Object.values || valuesPolyfill;

console.log(values({ a: 1, b: 2, c: 3 }));

в

Комментарии (0)

Если вы уже используете основной-Яш (например, с помощью угловой) вы можете просто импортировать по полифилл:

   import 'core-js/es7/object';
Комментарии (0)

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

var obj = { foo: 'bar', baz: 42 };
console.log(_.values(obj)); // ['bar', 42]
Комментарии (0)

в

var x = {Name: 'John', Age: 30, City: 'Bangalore'};

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

document.getElementById("tag").innerHTML = Object.values(x)
<p id="tag"></p>

в

Комментарии (1)

Я знаю, это старая тема. Я играл вокруг и просто хочу добавить другой реализации. Это просто версия карты с картой само по себе реализовано с уменьшить :

в

let obj = { foo: 'bar', baz: 42 };

const valueArray = Object.keys(obj).reduce((acc, key) => {
  acc.push(obj[key]);
  return acc;
}, []);

console.log(valueArray);

в

Это делает работу, но это как-то, что беспокоит меня. Функция редуктора используется параметр obj и в obj не вводят в нем. Нам следует избегать глобальная переменная внутри функции и делает наши функции более проверкой. Поэтому я предпочитаю эту версию с вспомогательная функция редуктора, который принимает объект в качестве параметра в вернуть фактическая функция редуктора . Она становится:

в

let obj = { foo: 'bar', baz: 42 };

// reducer function helper take obj and return the actual reducer function
let reducerFuncHelper= obj => (acc, key) => {
  acc.push(obj[key]);
  return acc;
}
//much better
const valueArray = Object.keys(obj).reduce(reducerFuncHelper(obj), []);
console.log(valueArray);

в

Комментарии (0)

Как я'т нашли ответа на мои потребности:

в

var obj = { foo: 'bar', baz: 42 };

console.log(obj[Object.keys(obj)[0]]) // bar

console.log(obj[Object.keys(obj)[1]])  // 42

в

Используя возможности объектов, изложив их в буквальном.

Комментарии (2)