Я'м ищу альтернативный вариант для объекта.значений функции ()`. Как описано здесь функция не поддерживается в браузере.
При выполнении в следующем примере кода:
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])
Объект.значения() является частью ES8(июнь 2017) спецификация. Используя Кордова, я понял, что в Android 5.0 объект WebView не'т поддерживать его. Итак, я сделал следующее, создание функции полифилл, только если эта функция не поддерживается:
if (!Object.values) Object.values = o=>Object.keys(o).map(k=>o[k]);
Поскольку объект является (не так) последние реализации, если вы хотите поддерживать все браузеры (АКА IE8 и ниже), то вам нужно создать свою собственную функцию:
function objectValues(obj) {
var res = [];
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
res.push(obj[i]);
}
}
return res;
}
ЗЫ: только заметил, что с ECMAScript 6
тег. Кстати я оставлю этот ответ здесь, просто на случай, если кому-то это нужно.
Вы можете использовать полифилл:
в
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 }));
в
Если вы уже используете основной-Яш (например, с помощью угловой) вы можете просто импортировать по полифилл:
import 'core-js/es7/object';
Для людей, использующих UnderscoreJS, можно получить значения объектов с помощью `_.значений :
var obj = { foo: 'bar', baz: 42 };
console.log(_.values(obj)); // ['bar', 42]
в
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>
в
Я знаю, это старая тема. Я играл вокруг и просто хочу добавить другой реализации. Это просто версия карты с картой само по себе реализовано с уменьшить :
в
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);
в
Как я'т нашли ответа на мои потребности:
в
var obj = { foo: 'bar', baz: 42 };
console.log(obj[Object.keys(obj)[0]]) // bar
console.log(obj[Object.keys(obj)[1]]) // 42
в
Используя возможности объектов, изложив их в буквальном.