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
//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 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. Một mảng mới với các phần tử con được nối với nó. 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ố
0 Tùy chọnOptionalvar flatten = require['flat']
flatten[obj];
Giá trị trả về
Sự mô tả
flat[]
là một phương thức sao chép. Nó không thay đổi
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.var flatten = require['flat']
flatten[obj];
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
Đặ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