Hướng dẫn get nested object keys javascript - lấy các khóa đối tượng lồng nhau javascript

-3

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi cần một phương pháp đơn giản để có được khóa của một đối tượng lồng nhau, ví dụ: description. Đây là cấu trúc của tôi:

let data = [
  {
    name: "Apple",
    id: 1,
    alt: [{ name: "fruit1", description: "tbd1" }]
  },
  {
    name: "Banana",
    id: 2,
    alt: [{ name: "fruit2", description: "tbd2" }]
  },
  {
    name: "Blueberry",
    id: 3,
    alt: [{ name: "fruit3", description: "tbd3" }]
  }
];

Hướng dẫn get nested object keys javascript - lấy các khóa đối tượng lồng nhau javascript

Dave Newton

157K24 Huy hiệu vàng254 Huy hiệu bạc 301 Huy hiệu đồng24 gold badges254 silver badges301 bronze badges

Đã hỏi ngày 29 tháng 10 năm 2019 lúc 11:48Oct 29, 2019 at 11:48

4

Bạn có thể sử dụng

const isObject = (obj) => obj != null && obj.constructor.name === "Object";

let data = [
  { name: "Apple",     id: 1, alt: [{ name: "fruit1", description: "tbd1" }] },
  { name: "Banana",    id: 2, alt: [{ name: "fruit2", description: "tbd2" }] },
  { name: "Blueberry", id: 3, alt: [{ name: "fruit3", description: "tbd3" }] }
];

console.log(getKeys(data, false, false));
console.log(getKeys(data, true, true));

function getKeys(obj, keepObjKeys, skipArrays, keys=[], scope=[]) {
  if (Array.isArray(obj)) {
    if (!skipArrays) scope.push('[' + obj.length + ']');
    obj.forEach((o) => getKeys(o, keepObjKeys, skipArrays, keys, scope), keys);
  } else if (isObject(obj)) {
    Object.keys(obj).forEach((k) => {
      if ((!Array.isArray(obj[k]) && !isObject(obj[k])) || keepObjKeys) {
        let path = scope.concat(k).join('.').replace(/\.\[/g, '[');
        if (!keys.includes(path)) keys.push(path);
      }
      getKeys(obj[k], keepObjKeys, skipArrays, keys, scope.concat(k));
    }, keys);
  }
  return keys;
}
0 để liệt kê các khóa cho bất kỳ đối tượng tùy ý nào. Về việc làm tổ, nó chỉ là một trường hợp biết những chỉ số lồng nhau nào bạn muốn liệt kê các trường cho và cung cấp nó.

Bạn có thể muốn xem xét một cái gì đó như thế này

Đã trả lời ngày 29 tháng 10 năm 2019 lúc 11:55Oct 29, 2019 at 11:55

HannahannaHanna

494 huy hiệu đồng4 bronze badges

1

Nếu bạn muốn các khóa, bao gồm các phím lồng nhau, bạn có thể đệ quy các mảng/đối tượng như vậy.

Có hai tham số tùy chọn cho phép bạn:

  • Bỏ qua phần mảng, tức là
    const isObject = (obj) => obj != null && obj.constructor.name === "Object";
    
    let data = [
      { name: "Apple",     id: 1, alt: [{ name: "fruit1", description: "tbd1" }] },
      { name: "Banana",    id: 2, alt: [{ name: "fruit2", description: "tbd2" }] },
      { name: "Blueberry", id: 3, alt: [{ name: "fruit3", description: "tbd3" }] }
    ];
    
    console.log(getKeys(data, false, false));
    console.log(getKeys(data, true, true));
    
    function getKeys(obj, keepObjKeys, skipArrays, keys=[], scope=[]) {
      if (Array.isArray(obj)) {
        if (!skipArrays) scope.push('[' + obj.length + ']');
        obj.forEach((o) => getKeys(o, keepObjKeys, skipArrays, keys, scope), keys);
      } else if (isObject(obj)) {
        Object.keys(obj).forEach((k) => {
          if ((!Array.isArray(obj[k]) && !isObject(obj[k])) || keepObjKeys) {
            let path = scope.concat(k).join('.').replace(/\.\[/g, '[');
            if (!keys.includes(path)) keys.push(path);
          }
          getKeys(obj[k], keepObjKeys, skipArrays, keys, scope.concat(k));
        }, keys);
      }
      return keys;
    }
    1
  • Có nên giữ các phím đối tượng cha mẹ, tức là
    const isObject = (obj) => obj != null && obj.constructor.name === "Object";
    
    let data = [
      { name: "Apple",     id: 1, alt: [{ name: "fruit1", description: "tbd1" }] },
      { name: "Banana",    id: 2, alt: [{ name: "fruit2", description: "tbd2" }] },
      { name: "Blueberry", id: 3, alt: [{ name: "fruit3", description: "tbd3" }] }
    ];
    
    console.log(getKeys(data, false, false));
    console.log(getKeys(data, true, true));
    
    function getKeys(obj, keepObjKeys, skipArrays, keys=[], scope=[]) {
      if (Array.isArray(obj)) {
        if (!skipArrays) scope.push('[' + obj.length + ']');
        obj.forEach((o) => getKeys(o, keepObjKeys, skipArrays, keys, scope), keys);
      } else if (isObject(obj)) {
        Object.keys(obj).forEach((k) => {
          if ((!Array.isArray(obj[k]) && !isObject(obj[k])) || keepObjKeys) {
            let path = scope.concat(k).join('.').replace(/\.\[/g, '[');
            if (!keys.includes(path)) keys.push(path);
          }
          getKeys(obj[k], keepObjKeys, skipArrays, keys, scope.concat(k));
        }, keys);
      }
      return keys;
    }
    2.

const isObject = (obj) => obj != null && obj.constructor.name === "Object";

let data = [
  { name: "Apple",     id: 1, alt: [{ name: "fruit1", description: "tbd1" }] },
  { name: "Banana",    id: 2, alt: [{ name: "fruit2", description: "tbd2" }] },
  { name: "Blueberry", id: 3, alt: [{ name: "fruit3", description: "tbd3" }] }
];

console.log(getKeys(data, false, false));
console.log(getKeys(data, true, true));

function getKeys(obj, keepObjKeys, skipArrays, keys=[], scope=[]) {
  if (Array.isArray(obj)) {
    if (!skipArrays) scope.push('[' + obj.length + ']');
    obj.forEach((o) => getKeys(o, keepObjKeys, skipArrays, keys, scope), keys);
  } else if (isObject(obj)) {
    Object.keys(obj).forEach((k) => {
      if ((!Array.isArray(obj[k]) && !isObject(obj[k])) || keepObjKeys) {
        let path = scope.concat(k).join('.').replace(/\.\[/g, '[');
        if (!keys.includes(path)) keys.push(path);
      }
      getKeys(obj[k], keepObjKeys, skipArrays, keys, scope.concat(k));
    }, keys);
  }
  return keys;
}
.as-console-wrapper { top: 0; max-height: 100% !important; }

Đã trả lời ngày 29 tháng 10 năm 2019 lúc 12:33Oct 29, 2019 at 12:33

Ông Polywhirlmr. PolywhirlMr. Polywhirl

36,9K12 Huy hiệu vàng78 Huy hiệu bạc126 Huy hiệu đồng12 gold badges78 silver badges126 bronze badges

Để có được các phím của một đối tượng lồng nhau:

const isObject = (obj) => obj != null && obj.constructor.name === "Object";

let data = [
  { name: "Apple",     id: 1, alt: [{ name: "fruit1", description: "tbd1" }] },
  { name: "Banana",    id: 2, alt: [{ name: "fruit2", description: "tbd2" }] },
  { name: "Blueberry", id: 3, alt: [{ name: "fruit3", description: "tbd3" }] }
];

console.log(getKeys(data, false, false));
console.log(getKeys(data, true, true));

function getKeys(obj, keepObjKeys, skipArrays, keys=[], scope=[]) {
  if (Array.isArray(obj)) {
    if (!skipArrays) scope.push('[' + obj.length + ']');
    obj.forEach((o) => getKeys(o, keepObjKeys, skipArrays, keys, scope), keys);
  } else if (isObject(obj)) {
    Object.keys(obj).forEach((k) => {
      if ((!Array.isArray(obj[k]) && !isObject(obj[k])) || keepObjKeys) {
        let path = scope.concat(k).join('.').replace(/\.\[/g, '[');
        if (!keys.includes(path)) keys.push(path);
      }
      getKeys(obj[k], keepObjKeys, skipArrays, keys, scope.concat(k));
    }, keys);
  }
  return keys;
}
3 => Kết quả trong mảng chuỗi ["name", "mô tả"] - không cần thiết theo thứ tự này.

Để nhận giá trị của khóa mô tả:

const isObject = (obj) => obj != null && obj.constructor.name === "Object";

let data = [
  { name: "Apple",     id: 1, alt: [{ name: "fruit1", description: "tbd1" }] },
  { name: "Banana",    id: 2, alt: [{ name: "fruit2", description: "tbd2" }] },
  { name: "Blueberry", id: 3, alt: [{ name: "fruit3", description: "tbd3" }] }
];

console.log(getKeys(data, false, false));
console.log(getKeys(data, true, true));

function getKeys(obj, keepObjKeys, skipArrays, keys=[], scope=[]) {
  if (Array.isArray(obj)) {
    if (!skipArrays) scope.push('[' + obj.length + ']');
    obj.forEach((o) => getKeys(o, keepObjKeys, skipArrays, keys, scope), keys);
  } else if (isObject(obj)) {
    Object.keys(obj).forEach((k) => {
      if ((!Array.isArray(obj[k]) && !isObject(obj[k])) || keepObjKeys) {
        let path = scope.concat(k).join('.').replace(/\.\[/g, '[');
        if (!keys.includes(path)) keys.push(path);
      }
      getKeys(obj[k], keepObjKeys, skipArrays, keys, scope.concat(k));
    }, keys);
  }
  return keys;
}
4 => Kết quả trong chuỗi
const isObject = (obj) => obj != null && obj.constructor.name === "Object";

let data = [
  { name: "Apple",     id: 1, alt: [{ name: "fruit1", description: "tbd1" }] },
  { name: "Banana",    id: 2, alt: [{ name: "fruit2", description: "tbd2" }] },
  { name: "Blueberry", id: 3, alt: [{ name: "fruit3", description: "tbd3" }] }
];

console.log(getKeys(data, false, false));
console.log(getKeys(data, true, true));

function getKeys(obj, keepObjKeys, skipArrays, keys=[], scope=[]) {
  if (Array.isArray(obj)) {
    if (!skipArrays) scope.push('[' + obj.length + ']');
    obj.forEach((o) => getKeys(o, keepObjKeys, skipArrays, keys, scope), keys);
  } else if (isObject(obj)) {
    Object.keys(obj).forEach((k) => {
      if ((!Array.isArray(obj[k]) && !isObject(obj[k])) || keepObjKeys) {
        let path = scope.concat(k).join('.').replace(/\.\[/g, '[');
        if (!keys.includes(path)) keys.push(path);
      }
      getKeys(obj[k], keepObjKeys, skipArrays, keys, scope.concat(k));
    }, keys);
  }
  return keys;
}
5.

Để có được một mảng tất cả các mô tả:

const isObject = (obj) => obj != null && obj.constructor.name === "Object";

let data = [
  { name: "Apple",     id: 1, alt: [{ name: "fruit1", description: "tbd1" }] },
  { name: "Banana",    id: 2, alt: [{ name: "fruit2", description: "tbd2" }] },
  { name: "Blueberry", id: 3, alt: [{ name: "fruit3", description: "tbd3" }] }
];

console.log(getKeys(data, false, false));
console.log(getKeys(data, true, true));

function getKeys(obj, keepObjKeys, skipArrays, keys=[], scope=[]) {
  if (Array.isArray(obj)) {
    if (!skipArrays) scope.push('[' + obj.length + ']');
    obj.forEach((o) => getKeys(o, keepObjKeys, skipArrays, keys, scope), keys);
  } else if (isObject(obj)) {
    Object.keys(obj).forEach((k) => {
      if ((!Array.isArray(obj[k]) && !isObject(obj[k])) || keepObjKeys) {
        let path = scope.concat(k).join('.').replace(/\.\[/g, '[');
        if (!keys.includes(path)) keys.push(path);
      }
      getKeys(obj[k], keepObjKeys, skipArrays, keys, scope.concat(k));
    }, keys);
  }
  return keys;
}
6.

Không biết ý của bạn, vì vậy đã cho bạn tất cả các tùy chọn mà tôi có thể nghĩ ra.

Đã trả lời ngày 29 tháng 10 năm 2019 lúc 12:25Oct 29, 2019 at 12:25

GiborgiborGibor

1.6675 huy hiệu bạc20 Huy hiệu đồng5 silver badges20 bronze badges

Tôi có thể giúp gì cho bạn

let keys = Object.keys(yourObject);

Mảng khóa chứa tên, mô tả

Đã trả lời ngày 29 tháng 10 năm 2019 lúc 13:20Oct 29, 2019 at 13:20

JavaScript cho phép bạn lưu trữ dữ liệu dưới dạng các cặp giá trị khóa được gọi là đối tượng JS. Cấu trúc của chúng tương tự như JSON và thậm chí hỗ trợ làm tổ, nghĩa là sử dụng một đối tượng trong một đối tượng khác. Đôi khi bạn có thể cần nhận các khóa từ các đối tượng trong JavaScript. Trong bài viết này, chúng tôi sẽ học cách lấy các phím đối tượng lồng nhau trong JavaScript.

Hãy để chúng tôi nói rằng bạn có đối tượng lồng nhau sau trong JavaScript.

let data = [
  {
    name: "Apple",
    id: 1,
    alt: [{ name: "fruit1", description: "tbd1" }]
  },
  {
    name: "Banana",
    id: 2,
    alt: [{ name: "fruit2", description: "tbd2" }]
  },
  {
    name: "Blueberry",
    id: 3,
    alt: [{ name: "fruit3", description: "tbd3" }]
  }
];

Mỗi đối tượng JS đều hỗ trợ hàm SEPS () trả về một mảng các phím có mặt ở cấp độ đầu tiên của đối tượng. Đây là cú pháp của nó.

let keys = Object.keys(yourObject);

Bạn có thể truy cập đối tượng lồng nhau bằng cách sử dụng các chỉ mục 0, 1, 2, v.v. Vì vậy, dữ liệu [0] .alt [0] sẽ truy cập vào đối tượng lồng vào đầu tiên. Bây giờ bạn có thể gọi hàm các khóa () đã đề cập ở trên để có được danh sách các khóa của nó.

Object.keys(data[0].alt[0])

Lệnh trên sẽ trả về [‘Tên,‘ Mô tả] không nhất thiết theo cùng một thứ tự.

Nếu bạn muốn nhận giá trị của một khóa cụ thể, bạn có thể trực tiếp tham khảo nó bằng tên khóa của nó. Dưới đây là lệnh để nhận được giá trị mô tả của đối tượng lồng nhau đầu tiên.

data[0].alt[0].description

Nếu bạn muốn nhận được một mảng giá trị mô tả của tất cả các đối tượng lồng nhau, hãy sử dụng cú pháp sau.

data.map(obj => obj.alt[0].description)

Trong bài viết này, chúng tôi đã học được cách lấy các phím đối tượng lồng nhau trong JavaScript.

Cũng đọc:

Cách đọc các đối số dòng lệnh trong nodejshow để thay đổi tên lớp phần tử trong vòng JavaScriptJavaScript thành 2 dấu vị trí thập phân để vô hiệu hóa nhấp chuột phải vào trang web bằng cách sử dụng Javascripthow để tắt/bật đầu vào trong jQuery
How to Change Element’s Class Name in JavaScript
JavaScript Round to 2 Decimal Places
How to Disable Right Click on Web Page Using JavaScript
How to Disable/Enable Input in jQuery

Bài viết liên quan:

Làm thế nào để bạn nhận được các phím cho các đối tượng lồng nhau?

Làm cách nào để nhận các phím và giá trị của một đối tượng ?..
Sự vật. Khóa (OBJ) - Trả về tất cả các khóa của đối tượng dưới dạng mảng ..
Sự vật. Giá trị (OBJ) - Trả về tất cả các giá trị của đối tượng dưới dạng mảng ..
Object.entries (OBJ) - Trả về một mảng [khóa, giá trị].

Làm thế nào tôi có thể truy cập và xử lý các mảng đối tượng lồng nhau?

Bạn có thể truy cập một mảng các đối tượng lồng nhau bằng cách sử dụng ký hiệu dấu chấm hoặc ký hiệu khung.JavaScript chỉ có một loại dữ liệu có thể chứa nhiều giá trị: đối tượng.Một mảng là một dạng đặc biệt của một đối tượng.Cả mảng và đối tượng hiển thị một khóa -> Cấu trúc giá trị.either using dot notation or bracket notation. JavaScript has only one data type which can contain multiple values: Object. An Array is a special form of an object. Both arrays and objects expose a key -> value structure.

Đối tượng lồng nhau trong JavaScript là gì?

Định nghĩa cơ bản của một đối tượng trong JavaScript là một thùng chứa cho các giá trị được đặt tên gọi là Thuộc tính (khóa).Đôi khi, chúng ta cần tạo một đối tượng bên trong một đối tượng khác.Trong trường hợp này, nó được gọi là một đối tượng lồng nhau.create an object inside another object. In this case, it's called a nested object.

Làm thế nào để bạn truy cập các thuộc tính của một đối tượng?

Bạn có thể truy cập các thuộc tính của một đối tượng trong JavaScript theo 3 cách:..
DOT thuộc tính accessor: Đối tượng.tài sản..
Khung vuông Truy cập thuộc tính: Đối tượng ['Thuộc tính'].
Phá hủy đối tượng: Const {Property} = Object ..