Tôi có một đối tượng JavaScript như
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
Làm thế nào tôi có thể nhận được độ dài và danh sách các khóa trong đối tượng này?
Tôi có một đối tượng JavaScript như
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
Làm thế nào tôi có thể nhận được độ dài và danh sách các khóa trong đối tượng này?
Câu trả lời:
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, điều mà bạn không nên làm. Đối với các nhà xây dựng tùy chỉnh, mặc dù, bạn đã đúng.
[]cho nó (hoặc array()sau đó) làm cho nó trở thành một mảng, sau đó bạn có thể sử dụng như một mảng một cách an toàn.
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
var keys = Object.keys(obj);
console.log('obj contains ' + keys.length + ' keys: '+ keys);
Nó được hỗ trợ trên hầu hết các trình duyệt chính hiện nay.
for(key in ob)! Object.keyssẽ không liệt kê các khóa từ nguyên mẫu, nhưng .. in objkhông.
Underscore.js làm cho việc chuyển đổi khá sạch sẽ:
var keys = _.map(x, function(v, k) { return k; });
Chỉnh sửa: Tôi nhớ rằng bạn cũng có thể làm điều này:
var keys = _.keys(x);
Nếu bạn chỉ muốn các khóa dành riêng cho đối tượng cụ thể đó chứ không phải bất kỳ prototypethuộc tính dẫn xuất nào :
function getKeys(obj) {
var r = []
for (var k in obj) {
if (!obj.hasOwnProperty(k))
continue
r.push(k)
}
return r
}
ví dụ:
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;
để truy cập bất kỳ giá trị nào từ đối tượng, bạn có thể sử dụng obj [key];
keys.length, khác nhau cho mỗi lần lặp khi mỗi lần lặp chèn một giá trị.
Anurags trả lời về cơ bản là chính xác. Nhưng để hỗ trợ Object.keys(obj)trong các trình duyệt cũ hơn, bạn có thể sử dụng mã bên dưới được sao chép từ
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
. Nó thêm Object.keys(obj)phương thức nếu nó không có sẵn từ trình duyệt.
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;
};
}());
}
Giải pháp đệ quy cho các trình duyệt hỗ trợ 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;
};
Sử dụng Object.keys()... đó là cách để đi.
Tài liệu đầy đủ có sẵn trên trang MDN được liên kết bên dưới:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
Nếu bạn quyết định sử dụng Underscore.js, bạn nên làm
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);
Trong JavaScript, một đối tượng là một thực thể độc lập, với các thuộc tính và loại.
Để tìm nạp các giá trị từ Object dưới dạng mảng: Object .values (obj) // obj là tên đối tượng mà bạn đã sử dụng Kết quả -> ["value1", "value2", "value3", "value4"]
Để tìm nạp các khóa từ Object dưới dạng mảng: Object .keys (obj) // obj là tên đối tượng mà bạn đã sử dụng Kết quả -> ["key1", "key2", "key3", "key4"]
Vì cả hai hàm đều trả về mảng, bạn có thể nhận được độ dài của khóa hoặc giá trị bằng cách sử dụng thuộc tính length. Ví dụ: Object .values (obj) .length hoặc Object .keys (obj) .length
Để biết một chuỗi được phân tách bằng dấu phẩy liệt kê các khóa của Đối tượng JSON, hãy thử các cách sau:
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' */
Sử dụng ES6, bạn có thể sử dụng forEachđể lặp lại các Khóa của Đối tượng. Để nhận tất cả các khóa bạn có thể sử dụng Object.keys, trả về tất cả các khóa trong Đối tượng
Object.keys(obj).forEach(function(keyValue, index, map) {
console.log(keyValue);
});
Bàn tay ngắn của đoạn trích trên sẽ là, chỉ mất một tham số
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)
}
sử dụng lát, áp dụng và tham gia phương pháp.
var print = Array.prototype.slice.apply( obj );
alert('length='+print.length+' list'+print.join());