ฉันมีวัตถุ 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);
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 [กุญแจ];
keys.lengthซึ่งจะแตกต่างกันสำหรับการทำซ้ำแต่ละครั้งเนื่องจากการทำซ้ำแต่ละครั้งจะแทรกค่า
obj = {'a':'c','b':'d'}
คุณสามารถลอง:
[index for (index in obj)]
สิ่งนี้จะกลับมา:
['a','b']
เพื่อรับรายการคีย์หรือ
[obj[index] for (index in obj)]
เพื่อรับค่า
คำตอบของ 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;
};
}());
}
โปรดทราบว่าใน coffeescript สามารถทำได้ในเบราว์เซอร์และโหนดทั้งหมด
k for k of obj
และดังนั้น
(1 for _ of obj).length
โซลูชันแบบเรียกซ้ำสำหรับเบราว์เซอร์ที่รองรับ 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;
};
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
console.log(Object.keys(obj));
console.log(Object.keys(obj).length)
ใช้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 ในรูปแบบของ array: Object .values (obj) // obj เป็นชื่อวัตถุที่คุณใช้ ผลลัพธ์ -> ["value1", "value2", "value3", "value4"]
สำหรับการดึงกุญแจจาก Object ในรูปแบบของ array: Object .key (obj) // obj เป็นชื่อวัตถุที่คุณใช้ ผลลัพธ์ -> ["key1", "key2", "key3", "key4"]
ในขณะที่ฟังก์ชั่นทั้งสองส่งคืนอาร์เรย์คุณสามารถรับความยาวของคีย์หรือค่าโดยใช้คุณสมบัติความยาว ตัวอย่างเช่น - Object .values (obj) .length หรือ Object .keys (obj) .length
สำหรับสตริงที่คั่นด้วยเครื่องหมายจุลภาคซึ่งแสดงรายการคีย์ของวัตถุ JSON ให้ลองดังต่อไปนี้:
function listKeys(jObj){
var keyString = '';
for(var k in jObj){
keyString+=(','+k);
}
return keyString.slice(1);
}
/* listKeys({'a' : 'foo', 'b' : 'foo', 'c' : 'foo'}) -> 'a,b,c' */
ใช้ ES6 คุณสามารถใช้forEachเพื่อทำซ้ำคีย์ของวัตถุ เพื่อรับคีย์ทั้งหมดคุณสามารถใช้Object.keysซึ่งส่งคืนคีย์ทั้งหมดในวัตถุ
Object.keys(obj).forEach(function(keyValue, index, map) {
console.log(keyValue);
});
ตัวอย่างสั้น ๆ ของตัวอย่างด้านบนจะเป็นเพียงพารามิเตอร์เดียวเท่านั้น
Object.keys(obj).forEach(function(keyValue) {
console.log(keyValue);
});
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());