javascript - 在不使用索引作为键的情况下推送 JavaScript 对象
问题描述
我正在尝试遍历一组数据并创建一个 JavaScript 对象列表。数据包结构看起来像这样
let packet = {
location: "",
email: ""
}
每个数据包的密钥应该是人名。所以最好是这样
let packet = {
[name]:{
location: "",
email: ""
}
}
然后我遍历一组数据填充每个数据包并将其推入数据包列表
let packets = [];
for(index = 0; index < data.length; ++index){
let packet = {
[getnamefromdata(data[index])]:{
location: getlocationfromdata(data[index]),
email: getemailfromdata(data[index])
}
}
packets.push(packet);
}
getname,location,emailfromdata 只是虚拟的伪函数。但是我在这里遇到的问题是,数据包结构看起来不像一个键列表,名称为每个键,而是一个整数索引列表,看起来像这样
0:{
keyname:{
location:
email:
}
}
1:{
keyname:{
location:
email:
}
}
2:{
keyname:{
location:
email:
}
}
但我真的不喜欢这种方式。是否可以摆脱每个索引并改用键名,因为每个键都是唯一的。所以我更喜欢这样
keyname:{
location:
email:
}
keyname:{
location:
email:
}
keyname:{
location:
email:
}
解决方案
您可以只使用键/值对而不是数据包数组创建一个对象。
const packets = {};
for(index = 0; index < data.length; ++index){
packets[getnamefromdata(data[index])] = {
location: getlocationfromdata(data[index]),
email: getemailfromdata(data[index])
};
}
您也可以在没有 for 循环和使用reduce
方法的情况下执行此操作。
const packets = data.reduce((prev, current) => ({
...prev,
[getnamefromdata(current)]: {
location: getlocationfromdata(current),
email: getemailfromdata(current)
}
}), {});
请参阅:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
推荐阅读
- rust - 为什么借用的范围不是迭代器,但范围是?
- ruby-on-rails - CSV:Class的Rails未定义方法“编码”
- javascript - 使用 vuexfire 动态绑定 firebase 集合列表
- protractor - 如何断言表格中是否存在文本
- visual-studio-code - vscode扩展如何带来二进制程序
- python - 打开 anaconda 提示符时预先输入的命令(miniconda3)
- javascript - 初始化时在 Cordova 应用程序中执行脚本的大延迟
- sql - Bigquery通过'And'条件选择数组值中数组列的记录
- ios - 在 WkWebview 上向右滑动时应用冻结
- python - 如何将两个不同的时间序列相互映射并在映射时执行计算?