0

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

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

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

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

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

谢谢!

编辑:按照流行的惯例,用“对象”替换了有问题的“哈希”一词。

4

7 回答 7

2

尝试这样的事情:

function getObjectValues(obj) {
    var i, ret = [];
    for( i in obj) if( obj.hasOwnProperty(i)) ret.push(obj[i]);
    return ret;
}
于 2013-10-08T10:13:38.557 回答
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]);
}
于 2013-10-10T05:01:51.737 回答
1

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

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

_.values(newHash)

返回:

["spam", "everything"]
于 2013-10-08T10:21:20.197 回答
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

于 2013-10-08T10:14:47.693 回答
0

你的对象声明有一个 " 字符太多了。

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

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

http://jsfiddle.net/upHyu/

于 2013-10-08T10:15:04.917 回答
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"]
于 2013-10-08T11:00:32.253 回答
0

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

于 2013-10-08T10:17:34.627 回答