这是我为检索给定对象中的所有值而编写的函数。
function getValues(data){
var keys = Object.keys(data);
var values = [];
for(var i = 0, l = keys.length, key; i< l; i++){
key = keys[i];
values.push(data[key]);
}
return values;
}
是否有任何内置方法可以检索对象中的所有值?这样的东西存在于Java for HashMaps中。我知道JS有一种方法可以通过Object.keys(obj)
来检索所有密钥。
答案 0 :(得分:12)
获取对象中包含的值数组的最简洁方法可能是使用Object.keys
和Array.prototype.map
:
obj = {
a: 1,
b: 2,
c: 3
};
values = Object.keys(obj).map(function (key) {
return obj[key];
});
否则,没有标准化的方法来获取对象值的数组。
对于迭代,ES6引入了一个for..of
循环,它将迭代一个对象的值:
for (value of obj) {
console.log(value); //1, 2, 3
}
ES7计划引入array comprehensions,因此生成values数组可以写成:
从上面继续:values = [for (x of Object.keys(obj)) obj[x]];
如果您已使用下划线,则可以使用_.values
方法:
_.values(obj); //[1, 2, 3]
如果您只想要有效实现此实用程序功能,lodash source是:
lodash.js v2.4.1 lines 2891-2914/**
* Creates an array composed of the own enumerable property values of `object`.
*
* @static
* @memberOf _
* @category Objects
* @param {Object} object The object to inspect.
* @returns {Array} Returns an array of property values.
* @example
*
* _.values({ 'one': 1, 'two': 2, 'three': 3 });
* // => [1, 2, 3] (property order is not guaranteed across environments)
*/
function values(object) {
var index = -1,
props = keys(object),
length = props.length,
result = Array(length);
while (++index < length) {
result[index] = object[props[index]];
}
return result;
}
答案 1 :(得分:1)
你可以在较新的浏览器中执行此操作:
Object.defineProperty(Object.prototype, 'values', {
get:function(){
return function(o){
var a = [];
for(var i in o){
a.push(o[i]);
}
return a;
}
}
});
var arrayOfValues = Object.values({a:'A',b:'B',c:'C'});
真的,我会这样做:
function objectValues(obj, inherited){
var a = [];
for(var i in obj){
var v = obj[i];
if(inherited){
a.push(v);
}
else if(obj.hasOwnProperty(i)){
a.push(v);
}
}
return a;
}
var notInheritedArrayOfValues = objectValues({a:'A',b:'B',c:'C'});
var inheritedArrayOfValues = objectValues({a:'A',b:'B',c:'C'}, true);