Tôi đang chạy một ứng dụng Express.js có một vài API cung cấp dữ liệu cho các hộp thả xuống. Dữ liệu được trả về ở dạng:
[
{
key: 'blah',
value: 'Blah Blah'
},
{
key: 'foo',
value: 'Foos'
},
{
key: 'bar',
value: 'Bars'
},
{
key: 'baz',
value: 'Bazingo'
}
];
trong đó khóa là khóa tùy chọn của tôi và giá trị là văn bản hiển thị. Cấu trúc của mảng này là cố định và tôi biết thực tế là tôi sẽ luôn có khóa và giá trị như các trường trong mỗi đối tượng trong mảng.
Khi tôi cố gắng xác thực biểu mẫu được gửi [xác thực phía máy chủ bổ sung], tôi muốn tham chiếu chéo giá trị được cung cấp cho một trường so với tất cả các giá trị cho "khóa" trong mảng [blah, foo, bar, baz]. Cho rằng đây sẽ là một tuyến đường được sử dụng thường xuyên, tôi muốn tránh lặp đi lặp lại trên mảng để tìm các giá trị được phép, mỗi lần. Có một cách đơn giản hơn để làm điều này? Nói cách khác, tôi biết tôi có thể sử dụng:
permittedValues = [];
for [i = 0; i < array.length; i++]{
permittedValues[i] = array[i]["key"];
}
Nhưng tôi muốn tránh điều này cho vòng lặp, nếu có thể.
P.S: Đây dường như là một câu hỏi cơ bản và câu trả lời tôi tìm thấy trực tuyến không trả lời chính xác câu hỏi của tôi. Vì vậy, xin lỗi nếu điều này đã được hỏi và trả lời.
Đọc thêm #
Cách làm phẳng một mảng bằng JavaScript
- 01 tháng 6 năm 2021
- 2 phút đọc
Giả sử bạn có mảng đối tượng sau:
const users = [ { id: 0, name: 'John' }, { id: 1, name: 'Wayne' }, { id: 2, name: 'David' }, ];
Từ mảng đối tượng này, nếu bạn muốn trích xuất các giá trị của tất cả các thuộc tính đối tượng được gọi là "name
", ví dụ như một mảng mới, bạn có thể làm như vậy theo các cách sau:
Sử dụng Array.prototype.map[]
Bạn có thể sử dụng phương thức Array.prototype.map[]
để tạo một mảng mới chỉ bao gồm các giá trị khóa cụ thể. Sử dụng Array.prototype.map[]
sẽ gọi chức năng gọi lại được cung cấp cho từng phần tử của mảng và thêm các giá trị được trả về vào mảng kết quả mới. Ví dụ:
// ES5+ const names = users.map[function [user] { return user.name; }]; console.log[names]; // ['John', 'Wayne', 'David']
Trong ES6+, bạn có thể rút ngắn cú pháp này bằng cách sử dụng chức năng mũi tên và giải nén thuộc tính đối tượng có liên quan được chuyển đến chức năng gọi lại được cung cấp, ví dụ, như vậy:
// ES6+ const names = users.map[[{ name }] => name]; console.log[names]; // ['John', 'Wayne', 'David']
Sử dụng vòng lặp permittedValues = [];
for [i = 0; i < array.length; i++]{
permittedValues[i] = array[i]["key"];
}
2
permittedValues = [];
for [i = 0; i < array.length; i++]{
permittedValues[i] = array[i]["key"];
}
Nếu bạn không thể hỗ trợ ES5 tối thiểu, thì bạn có thể chỉ cần lặp lại trên mảng bằng cách sử dụng vòng lặp
permittedValues = [];
for [i = 0; i < array.length; i++]{
permittedValues[i] = array[i]["key"];
}
2 và trích xuất các giá trị đối tượng vào một mảng mới theo cách sau:const names = []; for [let i = 0; i < users.length; i++] { if [!users[i].hasOwnProperty['name']] { continue; } names.push[users[i].name]; } console.log[names]; // ['John', 'Wayne', 'David']
Xin lưu ý rằng việc sử dụng phương thức
permittedValues = [];
for [i = 0; i < array.length; i++]{
permittedValues[i] = array[i]["key"];
}
4 trong mã ở trên; Nó được sử dụng để các thuộc tính di truyền của đối tượng có thể được bỏ qua và chỉ xem xét các thuộc tính của riêng đối tượng.Hy vọng bạn tìm thấy bài viết này hữu ích. Nó đã được xuất bản vào ngày 01 tháng 6 năm 2021. Vui lòng thể hiện tình yêu và sự hỗ trợ của bạn bằng cách chia sẻ bài đăng này.
- Phát triển web
- Frontend
- JavaScript
- Phụ trợ
- Node.js
Chuyển đổi các giá trị của một mảng thành các phím đối tượng #
Để chuyển đổi các giá trị của một mảng thành các phím đối tượng:
- Sử dụng phương thức
5 để lặp qua mảng.permittedValues = []; for [i = 0; i < array.length; i++]{ permittedValues[i] = array[i]["key"]; }
- Trên mỗi lần lặp, gán phần tử mảng làm khóa trong đối tượng tích lũy.
- Phương thức
6 sẽ xây dựng một đối tượng từ các giá trị của mảng.permittedValues = []; for [i = 0; i < array.length; i++]{ permittedValues[i] = array[i]["key"]; }
Copied!
const arr = ['name', 'age', 'country']; const obj = arr.reduce[[accumulator, value] => { return {...accumulator, [value]: ''}; }, {}]; console.log[obj]; // 👉️ {name: '', age: '', country: ''}
Nếu bạn không thích sử dụng phương thức
6, hãy cuộn xuống đoạn mã tiếp theo. permittedValues = [];
for [i = 0; i < array.length; i++]{
permittedValues[i] = array[i]["key"];
}
Hàm chúng tôi đã chuyển đến phương thức mảng.Reduce được gọi với mỗi phần tử trong mảng.
Chúng tôi đã cung cấp một đối tượng trống làm giá trị ban đầu cho biến
8. permittedValues = [];
for [i = 0; i < array.length; i++]{
permittedValues[i] = array[i]["key"];
}
Trên mỗi lần lặp, chúng tôi gán giá trị mảng làm khóa trong đối tượng và trả về giá trị mới của biến
permittedValues = [];
for [i = 0; i < array.length; i++]{
permittedValues[i] = array[i]["key"];
}
8.Chúng tôi đã khởi tạo từng khóa vào một chuỗi trống, tuy nhiên bạn có thể gán bất kỳ giá trị nào phù hợp với trường hợp sử dụng của bạn.
Đối tượng sẽ chứa tất cả các phần tử của mảng làm khóa sau lần lặp cuối cùng.
Một cách tiếp cận khác là sử dụng phương pháp mảng.
Để chuyển đổi các giá trị của một mảng thành các phím đối tượng:
- Sử dụng phương thức
5 để lặp qua mảng.permittedValues = []; for [i = 0; i < array.length; i++]{ permittedValues[i] = array[i]["key"]; }
- Sử dụng phương thức
const users = [ { id: 0, name: 'John' }, { id: 1, name: 'Wayne' }, { id: 2, name: 'David' }, ];
0 để lặp qua mảng. - Trên mỗi lần lặp, gán phần tử của mảng làm khóa trong đối tượng.
Copied!
const arr = ['name', 'age', 'country']; const obj = {}; arr.forEach[element => { obj[element] = ''; }]; console.log[obj]; // 👉️ {name: '', age: '', country: ''}
Hàm chúng tôi đã chuyển sang phương thức
const users = [ { id: 0, name: 'John' }, { id: 1, name: 'Wayne' }, { id: 2, name: 'David' }, ];0 được gọi với mỗi phần tử trong mảng.
Trên mỗi lần lặp, chúng tôi gán phần tử làm khóa trong đối tượng.
Đối tượng cuối cùng chứa tất cả các yếu tố của mảng làm khóa.
Cách tiếp cận mà bạn chọn là một vấn đề sở thích cá nhân. Sử dụng const users = [
{ id: 0, name: 'John' },
{ id: 1, name: 'Wayne' },
{ id: 2, name: 'David' },
];
2 có thể dễ đọc hơn và trực quan hơn nếu bạn không quen với phương pháp
6. permittedValues = [];
for [i = 0; i < array.length; i++]{
permittedValues[i] = array[i]["key"];
}
Đọc thêm #
- Cách làm phẳng một mảng bằng JavaScript
- Chuyển đổi một mảng thành một đối tượng bằng JavaScript