2013-10-08 92 views
0

所以我有一個對象(編輯:最初稱之爲「哈希」)像只返回對象的'值',而不是關鍵?

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

,我想回到剛纔的「垃圾郵件」和「一切」。

看來它不工作寫了這樣的循環:

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

謝謝!

編輯:根據流行的慣例,用「對象」替換有問題的單詞「散列」。

+4

「返回」格式是什麼?你不能返回多個值(通過解構或者迭代器即將推出到ES6),那麼你在尋找什麼?一組值? –

+1

您不應該需要js中的.value部分,但您大概只會獲得該對象中第一項的值,即「垃圾郵件」。你想把它們放在一個數組或其他東西然後返回這個地方 – PJUK

回答

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]); 
} 
2

嘗試這樣:

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

你的對象聲明具有「字符到多

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

for(var x in newHash) 
console.log(newHash[x]); 
(函數(O){風險RES = [],我

http://jsfiddle.net/upHyu/

+0

''''字符在問題中很可能只是一個錯字,這並不能回答關於「返回」值的部分 –

+0

正確 - 我想我失去了專注於他說循環不起作用。 – becquerel

0

;用於(ⅰ在鄰){res.push(o [i]);} return res;})(newHash);

1

如果你不介意使用Underscore(這是一個很棒的庫!),你可以這樣做:

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

_.values(newHash) 

回報:

["spam", "everything"] 
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"] 
相關問題