私はのようなJavaScriptオブジェクトを持っています
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
このオブジェクトのキーの長さとリストを取得するにはどうすればよいですか?
私はのようなJavaScriptオブジェクトを持っています
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
このオブジェクトのキーの長さとリストを取得するにはどうすればよいですか?
回答:
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
};
var keys = [];
for (var k in obj) keys.push(k);
alert("total " + keys.length + " keys: " + keys);
Object.prototype。ただし、カスタムコンストラクターについては、そのとおりです。
[]これに(またはarray()その当時に)割り当てると、配列になり、配列として安全に使用できます。
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
var keys = Object.keys(obj);
console.log('obj contains ' + keys.length + ' keys: '+ keys);
現在、ほとんどの主要ブラウザでサポートされています。
for(key in ob)!Object.keysプロトタイプからのキーをリスト.. in objしませんが、リストします。
Underscore.jsは変換をかなりクリーンにします。
var keys = _.map(x, function(v, k) { return k; });
編集:これもできることを逃しました:
var keys = _.keys(x);
特定のオブジェクトに固有であり、派生prototypeプロパティではないキーのみが必要な場合:
function getKeys(obj) {
var r = []
for (var k in obj) {
if (!obj.hasOwnProperty(k))
continue
r.push(k)
}
return r
}
例えば:
var keys = getKeys({'eggs': null, 'spam': true})
var length = keys.length // access the `length` property as usual for arrays
var keys = new Array();
for(var key in obj)
{
keys[keys.length] = key;
}
var keyLength = keys.length;
オブジェクトから任意の値にアクセスするには、obj [key]を使用できます。
keys.length。これは、反復ごとに値が挿入されるため、反復ごとに異なります。
Anuragsの答えは基本的に正しいです。ただしObject.keys(obj)、古いブラウザでもサポートするには、https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keysからコピーされた以下のコードを使用でき
ます
。Object.keys(obj)ブラウザから利用できない場合は、メソッドを追加します。
if (!Object.keys) {
Object.keys = (function() {
'use strict';
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;
return function(obj) {
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
throw new TypeError('Object.keys called on non-object');
}
var result = [], prop, i;
for (prop in obj) {
if (hasOwnProperty.call(obj, prop)) {
result.push(prop);
}
}
if (hasDontEnumBug) {
for (i = 0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) {
result.push(dontEnums[i]);
}
}
}
return result;
};
}());
}
ECMAScript 5をサポートするブラウザーの再帰的ソリューション:
var getObjectKeys = function(obj) {
var keys = Object.keys(obj);
var length = keys.length;
if (length !== 0) {
for (var i = 0; i < length; i++) {
if (typeof obj[keys[i]] === 'object') {
keys[keys[i]] = getObjectKeys(obj[keys[i]]);
}
}
}
return keys;
};
使用する Object.keys() ...それは行く方法です。
完全なドキュメントは、以下にリンクされているMDNサイトで入手できます。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
Underscore.jsを使用する場合は、
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
var keys = [];
_.each( obj, function( val, key ) {
keys.push(key);
});
console.log(keys.lenth, keys);
JavaScriptでは、オブジェクトは、プロパティとタイプを持つスタンドアロンエンティティです。
配列の形式でオブジェクトから値をフェッチする場合: Object .values(obj)// objは、使用したオブジェクト名です Result -> ["value1"、 "value2"、 "value3"、 "value4"]
配列の形式でオブジェクトからキーをフェッチする場合: Object .keys(obj)// objは、使用したオブジェクト名です Result -> ["key1"、 "key2"、 "key3"、 "key4"]
両方の関数が配列を返すため、lengthプロパティを使用してキーまたは値の長さを取得できます。例えば- オブジェクト .values(OBJ).LENGTH または オブジェクト .keys(OBJ).LENGTH
if(props.userType){
var data = []
Object.keys(props.userType).map(i=>{
data.push(props.userType[i])
})
setService(data)
}
スライス、適用、結合方法を使用します。
var print = Array.prototype.slice.apply( obj );
alert('length='+print.length+' list'+print.join());