Object.values()`関数の代替バージョンを探しています。
こちら]1にあるように、この関数はInternet Explorerではサポートされていません。
以下のサンプルコードを実行した場合。
var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
FirefoxとChromeでは正常に動作しますが、IE11では以下のエラーが発生します。
Object doesn't support property or method "values"
ここで、テストしてみましょう。[Fiddle][2].
では、手っ取り早く解決するにはどうしたらいいのでしょうか?
オブジェクト.キー()でキーの配列を取得し、
map()` で値を取得することができます。
var obj = { foo: 'bar', baz: 42 };
var values = Object.keys(obj).map(function(e) {
return obj[e]
})
console.log(values)
ES6ではarrow-functionsを使って一行で書くことができます。
var values = Object.keys(obj).map(e => obj[e])
Objectは(あまり)最近の実装なので、すべてのブラウザ(AKA IE8以下)をサポートしたいのであれば、独自の関数を作成する必要があります。
function objectValues(obj) {
var res = [];
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
res.push(obj[i]);
}
}
return res;
}
追記: ecmascript-6
タグに気づきました。この回答は、誰かが必要とする場合に備えて、ここに保管しておきます。
UnderscoreJSを使用しているユーザーは、 _.values
:を使用してオブジェクト値を取得できます。
var obj = { foo: 'bar', baz: 42 };
console.log(_.values(obj)); // ['bar', 42]
<。!-スニペットを開始:js hide:false console:true babel:false -->。
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>
<。!-終了スニペット-->。
私はそれが古いトピックであることを知っています。 私はアラウンドをプレイしていて、別の実装を追加したいだけです。 これは、マップ自体が削減されて実装されたマップバージョンです。
<。!-スニペットを開始:js hide:false console:true babel:false -->。
let obj = { foo: 'bar', baz: 42 };
const valueArray = Object.keys(obj).reduce((acc, key) => {
acc.push(obj[key]);
return acc;
}, []);
console.log(valueArray);
<。!-終了スニペット-->。
それは仕事をしますが、それは私を悩ませる何かを持っています。 減速関数は obj を使用し、 obj はその中に注入されませんでした。 グローバル変数内部関数を避け、関数をテスト可能にする必要があります。 したがって、私はこのバージョンをレデューサー関数ヘルパーで好む。これは、objをパラメーターとして取り、実際のレデューサー関数を返す。 . それはなる:
<。!-スニペットを開始:js hide:false console:true babel:false -->。
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);
<。!-終了スニペット-->。
私のニーズに対する答えが見つからなかったので:
<。!-スニペットを開始:js hide:false console:true babel:false -->。
var obj = { foo: 'bar', baz: 42 };
console.log(obj[Object.keys(obj)[0]]) // bar
console.log(obj[Object.keys(obj)[1]]) // 42
<。!-終了スニペット-->。
オブジェクトの可能性を使用して、リテラルごとにそれらをアドレス指定します。