只返回对象的'价值'而不是关键?

时间:2013-10-08 10:09:26

标签: javascript

所以我有一个对象(编辑:最初称之为“哈希”),如

newHash = 
{item1: "spam",
item2: "everything"
}

我只想回复“垃圾邮件”和“一切”。

似乎写这样的for循环不起作用:

for (var x in newHash) {return newHash[x].value}

谢谢!

编辑:根据流行惯例,将“hash”替换为“Object”。

7 个答案:

答案 0 :(得分:2)

尝试这样的事情:

function getObjectValues(obj) {
    var i, ret = [];
    for( i in obj) if( obj.hasOwnProperty(i)) ret.push(obj[i]);
    return ret;
}

答案 1 :(得分:1)

如果您不介意使用Underscore(这是一个很棒的库!),您可以这样做:

newHash = {
    item1: "spam",
    item2: "everything"
}

_.values(newHash)

返回:

["spam", "everything"]

答案 2 :(得分:1)

关于你问题的标题,我想你想这样做:

var newHash = {
    item1: "spam",
    item2: "everything"
};
newHash.item1; // "spam"
newHash['item1']; // "spam"
newHash.item2; // "everything"
newHash['item2']; // "everything"

然后,如果您想获取所有值,则需要将它们存储到列表中:

var list = [];
for (var key in newHash) {
    list.push(newHash[key]);
}
list; // ["spam", "everything"]
list.join(); // "spam,everything"

由于您的密钥基于相同的模式,您也可以这样做:

var list = [];
for (var i = 1; i <= 2; i++) {
    list.push(newHash['item' + i]);
}

答案 3 :(得分:0)

您可以执行以下操作:

return Object.keys(newHash).map(function (key) { return newHash[key]; });

,返回一个包含对象值的数组。

它的工作原理如下:你得到一个键数组,然后使用map函数得到一个相应的数组,其中包含每个键的值。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

答案 4 :(得分:0)

你的对象声明有“很多角色。

newHash = {
  item1: "spam",
  item2: "everything"
}

for( var x in newHash )
 console.log(newHash[x]);

http://jsfiddle.net/upHyu/

答案 5 :(得分:0)

(function(o){var res = [],i; for(i in o){res.push(o [i]);} return res;})(newHash);

答案 6 :(得分:0)

您始终可以沿与Object.keys()相同的行向对象原型添加值函数。

if (!('values' in Object.prototype)) {
  Object.prototype.values = function (obj) {
    return Object.keys(obj).map(function (p) { return obj[p]; });
  }
}

var obj = {
  '1': 'one',
  '2': 'two',
  '3': 'three'
}

console.log(obj.values()); // ["one", "two", "three"]