我正在寻找var options = {
android: {
senderID: "789175757493",
ecb:"onNotification",
forceShow: true
},
}
功能的替代版本
作为described here,Internet Explorer不支持该功能。
执行以下示例代码时:
Object.values()
它适用于Firefox和Chrome,但在IE11中引发了以下错误:
对象不支持属性或方法"值"
您可以在这里测试一下:Fiddle。
那么,什么是快速修复?
答案 0 :(得分:118)
您可以使用Object.keys()
获取一系列密钥,然后使用map()
获取值。
var obj = { foo: 'bar', baz: 42 };
var values = Object.keys(obj).map(function(e) {
return obj[e]
})
console.log(values)
使用ES6,您可以使用箭头功能在一行中编写。
var values = Object.keys(obj).map(e => obj[e])
答案 1 :(得分:11)
由于Object是( not so )最近的实现,如果你想支持所有浏览器(AKA IE8及以下版本),那么你需要创建自己的函数:
function objectValues(obj) {
var res = [];
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
res.push(obj[i]);
}
}
return res;
}
PS:刚注意到ecmascript-6
标签。顺便说一句,我在这里保留这个答案,以防有人需要它。
答案 2 :(得分:11)
Object.values()是ES8(2017年6月)规范的一部分。使用Cordova,我意识到Android 5.0 Webview并不支持它。因此,我执行了以下操作,仅在不支持该功能时才创建polyfill函数:
if (!Object.values) Object.values = o=>Object.keys(o).map(k=>o[k]);
答案 3 :(得分:5)
您可以使用polyfill:
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 }));

答案 4 :(得分:2)
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>
答案 5 :(得分:1)
对于使用UnderscoreJS的人,您可以使用_.values
获得对象值:
var obj = { foo: 'bar', baz: 42 };
console.log(_.values(obj)); // ['bar', 42]
答案 6 :(得分:1)
如果您已经在使用core-js(例如,使用Angular),则只需导入相应的polyfill:
import 'core-js/es7/object';
答案 7 :(得分:0)
我知道这是一个古老的话题。我正在玩arround,只是想添加另一个实现。 它只是地图版本,地图本身用reduce:
实现
let obj = { foo: 'bar', baz: 42 };
const valueArray = Object.keys(obj).reduce((acc, key) => {
acc.push(obj[key]);
return acc;
}, []);
console.log(valueArray);
&#13;
它完成了这项工作,但却有些困扰我的事情。 reducer函数使用 obj , obj 不是注入。我们应该避免函数内部的全局变量,并使我们的函数更强可测试。所以我更喜欢这个版本的 reducer function helper ,它将obj作为参数返回实际的reducer函数。它变成了:
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);
&#13;
答案 8 :(得分:0)
最好的方法是将其替换为ramda的values方法:
import * as R from 'ramda';
const obj = { foo: 'bar', test: 10 };
console.log(R.values(obj)) // ['bar', 10]
答案 9 :(得分:-1)
因为我没有找到满足我需求的答案:
var obj = { foo: 'bar', baz: 42 };
console.log(obj[Object.keys(obj)[0]]) // bar
console.log(obj[Object.keys(obj)[1]]) // 42
使用对象根据每个文字处理它们的可能性。
答案 10 :(得分:-1)
您可以使用Object.keys()获得键数组。这也将在IE中工作。完全不需要Object.values()来获取值,因为我们可以使用从Object.keys()获得的键来获取值,如下所示:
var obj = { foo: 'bar', baz: 42 };
var keyArray = Object.keys(obj);
for(var i = 0; i < keyArray.length; i++)
console.log(obj[keyArray[i]]);