Hướng dẫn how do i make an object flat in javascript? - làm cách nào để tạo một đối tượng phẳng trong javascript?

Một thực hiện đệ quy thay thế. Tôi chỉ cảm thấy như tự viết một lần thực hiện, mặc dù những người hiện tại đã thực sự tốt.

Hàm đệ quy kiểm tra xem khóa là loại 'object'.

  • Nếu đó là một đối tượng, chúng tôi lặp lại bằng khóa của mỗi đối tượng.
  • Khác, chúng tôi thêm nó vào đối tượng kết quả của chúng tôi.
function flat(res, key, val, pre = '') {
  const prefix = [pre, key].filter(v => v).join('.');
  return typeof val === 'object'
    ? Object.keys(val).reduce((prev, curr) => flat(prev, curr, val[curr], prefix), res)
    : Object.assign(res, { [prefix]: val});
}
return Object.keys(input).reduce((prev, curr) => flat(prev, curr, input[curr]), {});

Gói NPM phẳng

Hoặc bạn có thể chỉ cần sử dụng gói NPM phẳng, đây là một thư viện được thử nghiệm nổi tiếng.

var flatten = require('flat')
flatten(obj);

Tôi sẽ sử dụng điều này trong mã nghiêm trọng.

[Thêm] Cuộc gọi gọn hơn đến chức năng ở trên

function flatObject(input) {
  function flat(res, key, val, pre = '') {
    const prefix = [pre, key].filter(v => v).join('.');
    return typeof val === 'object'
      ? Object.keys(val).reduce((prev, curr) => flat(prev, curr, val[curr], prefix), res)
      : Object.assign(res, { [prefix]: val});
  }

  return Object.keys(input).reduce((prev, curr) => flat(prev, curr, input[curr]), {});
}

const result = flatObject(input);

[Thêm] bản demo

http://codepen.io/zurfyx/pen/VpErja?editors=1010

function flatObject(input) {
  function flat(res, key, val, pre = '') {
    const prefix = [pre, key].filter(v => v).join('.');
    return typeof val === 'object'
      ? Object.keys(val).reduce((prev, curr) => flat(prev, curr, val[curr], prefix), res)
      : Object.assign(res, { [prefix]: val});
  }

  return Object.keys(input).reduce((prev, curr) => flat(prev, curr, input[curr]), {});
}

const result = flatObject({
    a: 'jack',
    b: {
        c: 'sparrow',
        d: {
           e: 'hahaha'
        }
    }
});

document.getElementById('code').innerHTML = JSON.stringify(result, null, 2);

Phương pháp flat() tạo ra một mảng mới với tất cả các phần tử mảng con được liên kết vào nó đệ quy lên đến độ sâu được chỉ định.flat() method creates a new array with all sub-array elements concatenated into it recursively up to the specified depth.

Thử nó

Cú pháp

Thông số

var flatten = require('flat')
flatten(obj);
0 Tùy chọnOptional

Mức độ sâu chỉ định mức độ sâu của cấu trúc mảng lồng nhau nên được làm phẳng. Mặc định là 1.

Giá trị trả về

Một mảng mới với các phần tử con được nối với nó.

Sự mô tả

Phương pháp flat() là một phương thức sao chép. Nó không thay đổi

var flatten = require('flat')
flatten(obj);
2 mà thay vào đó trả về một bản sao nông chứa các phần tử giống như các phần tử từ mảng gốc.

Phương pháp flat() bỏ qua các khe trống nếu mảng được làm phẳng là thưa thớt. Ví dụ, nếu

var flatten = require('flat')
flatten(obj);
0 là 1, cả hai khe trống trong mảng gốc và ở cấp độ đầu tiên của các mảng lồng nhau đều bị bỏ qua, nhưng các khe trống trong các mảng lồng tiếp theo được bảo tồn với chính các mảng.

Phương pháp flat() là chung chung. Nó chỉ mong đợi giá trị

var flatten = require('flat')
flatten(obj);
2 sẽ có thuộc tính
var flatten = require('flat')
flatten(obj);
7 và các thuộc tính được khóa. Tuy nhiên, các yếu tố của nó phải là mảng nếu chúng bị san phẳng.

Ví dụ

Làm phẳng mảng lồng nhau

const arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]

const arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]

const arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]

const arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Sử dụng flat () trên các mảng thưa thớt

Phương thức flat() loại bỏ các khe trống trong các mảng:

const arr5 = [1, 2, , 4, 5];
console.log(arr5.flat()); // [1, 2, 4, 5]

const array = [1, , 3, ["a", , "c"]];
console.log(array.flat()); // [ 1, 3, "a", "c" ]

const array2 = [1, , 3, ["a", , ["d", , "e"]]];
console.log(array2.flat()); // [ 1, 3, "a", ["d", empty, "e"] ]
console.log(array2.flat(2)); // [ 1, 3, "a", "d", "e"]

Gọi phẳng () trên các đối tượng không phải là

Phương thức flat() đọc thuộc tính

var flatten = require('flat')
flatten(obj);
7 của
var flatten = require('flat')
flatten(obj);
2 và sau đó truy cập vào từng chỉ mục số nguyên. Nếu phần tử không phải là một mảng, nó sẽ được nối trực tiếp với kết quả. Nếu phần tử là một mảng, nó sẽ được làm phẳng theo tham số ____1010.

const arrayLike = {
  length: 3,
  0: [1, 2],
  // Array-like objects aren't flattened
  1: { length: 2, 0: 3, 1: 4 },
  2: 5,
};
console.log(Array.prototype.flat.call(arrayLike));
// [ 1, 2, { '0': 3, '1': 4, length: 2 }, 5 ]

Thông số kỹ thuật

Sự chỉ rõ
Đặc tả ngôn ngữ Ecmascript # sec-array.prototype.flat
# sec-array.prototype.flat

Tính tương thích của trình duyệt web

Bảng BCD chỉ tải trong trình duyệt

Xem thêm

Nó có nghĩa là gì để làm phẳng một đối tượng javascript?

Làm phẳng một mảng là một quá trình giảm kích thước của một mảng.Nói cách khác, đó là một quá trình giảm số lượng kích thước của một mảng xuống số thấp hơn.a process of reducing the dimensionality of an array. In other words, it a process of reducing the number of dimensions of an array to a lower number.

Một đối tượng phẳng là gì?

Làm phẳng là quá trình giảm một đối tượng vào một đối tượng một điểm chính.the process of reducing an object to a single−depth object.