Hướng dẫn javascript flatten array of objects by key - javascript làm phẳng mảng đối tượng bằng phím

Giả sử tôi có mảng sau của các đối tượng lưu trữ một cặp khóa \ giá trị:

var someArray = [
    {foo: 1},
    {bar: 2}
];

Tôi muốn làm phẳng mảng này vào một đối tượng, trong đó mỗi khóa từ các đối tượng gốc trở thành một thuộc tính của đối tượng đơn mới như vậy:

someObject = {
    foo: 1,
    bar: 2
}

Tôi sẽ luôn có các khóa duy nhất và chỉ có một khóa ghép giá trị.

Tôi biết nếu tôi lặp qua mảng trong một foreach, thì tôi chỉ có thể truy cập vào chỉ mục và giá trị của mục, ví dụ:

0: {foo: 1}

Tôi muốn có thể lặp lại và khi truy cập mục, hãy đọc khóa và giá trị riêng biệt để tôi có thể nối vào đối tượng mới của mình.

Tôi cảm thấy như Lodash sẽ có thể giúp đỡ ở đây, nhưng tôi đang vật lộn để tìm ra phương pháp của họ có thể giúp ích.

Ai đó có thể chỉ cho tôi đi đúng hướng?

Cảm ơn

Phương pháp

someObject = {
    foo: 1,
    bar: 2
}
0 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 đến độ sâu được chỉ định.
someObject = {
    foo: 1,
    bar: 2
}
0
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ố

someObject = {
    foo: 1,
    bar: 2
}
1 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

someObject = {
    foo: 1,
    bar: 2
}
0 là một phương thức sao chép. Nó không thay đổi
someObject = {
    foo: 1,
    bar: 2
}
3 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

someObject = {
    foo: 1,
    bar: 2
}
0 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
someObject = {
    foo: 1,
    bar: 2
}
1 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

someObject = {
    foo: 1,
    bar: 2
}
0 là chung chung. Nó chỉ mong đợi giá trị
someObject = {
    foo: 1,
    bar: 2
}
3 có thuộc tính
someObject = {
    foo: 1,
    bar: 2
}
8 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.

Lựa chọn thay thế

giảm và liên kết

const arr = [1, 2, [3, 4]];

// To flat single level array
arr.flat[];
// is equivalent to
arr.reduce[[acc, val] => acc.concat[val], []];
// [1, 2, 3, 4]

// or with decomposition syntax
const flattened = [arr] => [].concat[...arr];

Giảm + Concat + Isarray + đệ quy

const arr = [1, 2, [3, 4, [5, 6]]];

// to enable deep level flatten use recursion with reduce and concat
function flatDeep[arr, d = 1] {
  if [!Array.isArray[arr]] {
    return arr;
  }
  return d > 0
    ? arr.reduce[[acc, val] => acc.concat[flatDeep[val, d - 1]], []]
    : arr.slice[];
}

flatDeep[arr, Infinity];
// [1, 2, 3, 4, 5, 6]

Sử dụng một ngăn xếp

// non recursive flatten deep using a stack
// note that depth control is hard/inefficient as we will need to tag EACH value with its own depth
// also possible w/o reversing on shift/unshift, but array OPs on the end tends to be faster
function flatten[input] {
  const stack = [...input];
  const res = [];
  while [stack.length] {
    // pop value from stack
    const next = stack.pop[];
    if [Array.isArray[next]] {
      // push back array items, won't modify the original input
      stack.push[...next];
    } else {
      res.push[next];
    }
  }
  // reverse to restore input order
  return res.reverse[];
}

const arr = [1, 2, [3, 4, [5, 6]]];
flatten[arr];
// [1, 2, 3, 4, 5, 6]

Sử dụng hàm máy phát điện

function* flatten[array, depth] {
  if [depth === undefined] {
    depth = 1;
  }

  for [const item of array] {
    if [Array.isArray[item] && depth > 0] {
      yield* flatten[item, depth - 1];
    } else {
      yield item;
    }
  }
}

const arr = [1, 2, [3, 4, [5, 6]]];
const flattened = [...flatten[arr, Infinity]];
// [1, 2, 3, 4, 5, 6]

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

someObject = {
    foo: 1,
    bar: 2
}
0 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

someObject = {
    foo: 1,
    bar: 2
}
0 đọc thuộc tính
someObject = {
    foo: 1,
    bar: 2
}
8 của
someObject = {
    foo: 1,
    bar: 2
}
3 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ố
someObject = {
    foo: 1,
    bar: 2
}
1.

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

Làm thế nào để bạn làm phẳng một mảng các đối tượng?

Bạn sử dụng phương thức Flat [] để kết nối các phần tử con đệ quy thành một mảng duy nhất. Phương thức phẳng [] lấy giá trị độ sâu làm tham số của nó, tùy chọn tùy thuộc vào độ sâu của mảng bạn muốn làm phẳng [concatenate]. Phương thức phẳng [] lấy 1 làm chiều sâu theo mặc định.use the flat[] method for concatenating sub-arrays recursively into a single array. The flat[] method takes a depth value as its parameter which is optional depending on the depth of the array you wish to flatten [concatenate]. The flat[] method takes in 1 as a depth by default.

Làm thế nào để bạn làm phẳng một mảng đối tượng lồng nhau?

Chúng ta có thể làm phẳng mảng theo một trong những cách sau:..
Sử dụng javascript đơn giản [ES6] const familyTree = [// như trên]; const getMembers = [thành viên] => {hãy để trẻ em = []; const FlattenMembers = Thành viên. ....
Sử dụng phương pháp lodash flatmapdeep ..

Làm thế nào để bạn đặt một mảng trong javascript?

Các phương pháp khác nhau để làm phẳng một mảng..
một.Sử dụng Concat [] và Ứng dụng [] Let FlatArray = [].liên kết.....
b.Sử dụng toán tử lây lan.Đặt FlatArray = [].Concat [... mảng];// Đầu ra: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] ....
c.Sử dụng phương pháp giảm.Đặt FlatArray = mảng.Giảm [[acc, curval] => {return acc ..

Làm thế nào để bạn làm phẳng một đối tượng đối tượng?

Approach:..
Chúng tôi tạo một hàm gọi là đối tượng phẳng lấy đầu vào của một đối tượng và trả về một đối tượng ..
Vòng lặp qua đối tượng và kiểm tra loại thuộc tính hiện tại: nếu nó thuộc loại đối tượng và nó không phải là một mảng, hãy gọi lại chức năng.Nếu không, lưu trữ giá trị trong kết quả ..
Trả lại đối tượng ..

Bài Viết Liên Quan

Chủ Đề