javascript - 哪个是查找 Item 的好方法 - 对象或对象数组中的多个属性?
问题描述
哪个函数更适合通过getDoneDataOne
或查找项目getDoneDataTwo
?两种方法都是通过 Reduce 计算并创建一个数组或对象(不包括这些逻辑)
例如getDoneDataOne()
ProductId 的多个属性:
function getDoneDataOne() {
return {
'111': { Name: 'Item One', TotalDone: 3 },
'222': { Name: 'Item Two', TotalDone: 3 },
'333': { Name: 'Item Three', TotalDone: 1 }
}
}
例如getDoneDataTwo()
- 返回对象数组:
function getDoneDataTwo() {
return [
{ ProductId: 111, Name: 'Item One', TotalDone: 3 },
{ ProductId: 222, Name: 'Item Two', TotalDone: 3 },
{ ProductId: 333, Name: 'Item Three', TotalDone: 1 }
]
}
搜索项目首选哪种返回格式?
它遍历Batch
对象并通过以下方式找到一个项目doneData
:
选项1:
这是查找项目的正确实现吗?
const doneDataOne = getDoneDataOne();
Batch.Products.forEach(batchProduct => {
batchProductId = batchProduct.ProductId;
if (doneDataOne[batchProductId]) { //Is this correct way?
console.log(doneDataOne[batchProductId]);
}
});
选项 2:
const doneDataTwo = getDoneDataTwo();
Batch.Products.forEach(batchProduct => {
product = doneDataTwo.find(doneDataTwo => doneDataTwo.ProductId == batchProduct.ProductId);
if (product) {
console.log(product);
}
});
还是有其他更好的方法?
演示:
const Batch = {
Products: [{ ProductId: 222 }, { ProductId: 666 }, { ProductId: 333 }]
};
function getDoneDataOne() {
return {
'111': { Name: 'Item One', TotalDone: 3 },
'222': { Name: 'Item Two', TotalDone: 3 },
'333': { Name: 'Item Three', TotalDone: 1 }
}
}
function getDoneDataTwo() {
return [
{ ProductId: 111, Name: 'Item One', TotalDone: 3 },
{ ProductId: 222, Name: 'Item Two', TotalDone: 3 },
{ ProductId: 333, Name: 'Item Three', TotalDone: 1 }
]
}
// Example 1
const doneDataOne = getDoneDataOne();
Batch.Products.forEach(product => {
batchProductId = product.ProductId;
if (doneDataOne[batchProductId]) { //Is this correct way?
console.log(doneDataOne[batchProductId]);
}
});
// Example 2
const doneDataTwo = getDoneDataTwo();
Batch.Products.forEach(batchProduct => {
product = doneDataTwo.find(doneDataTwo => doneDataTwo.ProductId == batchProduct.ProductId);
if (product) {
console.log(product);
}
});
解决方案
我认为这在很大程度上取决于您将如何处理结果数据。
如果您知道您将通过已知 id 访问单个项目,那么使用对象并将 id 用作键会更方便,例如var item = data[id];
这样您就不必遍历或过滤数组来访问项目.
例如,如果您需要对数据进行排序,数组将有助于实现这一点。
如果不确切知道你在用数据做什么,很难说一个肯定比另一个更好,两者都有自己的位置。
推荐阅读
- android - android - 如何通过灰显 ImageView 来模拟按下的按钮?
- spring - 使用 Spring AMQP Java 配置为每个队列配置专用侦听器容器
- javascript - d3回调+ React中构造函数与箭头函数的绑定
- python - 复制文件,重命名,迭代并重复
- c++ - 如何在 magick c++ 中编写相当于 Imagemagick 命令行的内容?
- ip-address - 如何将 IP 地址与 ASN 数据匹配(maxmind)?
- python - 将字典中的键同步到列表中的多个值
- node.js - 无法在 Windows 上使用 npm 安装 handbrake-js
- python - 登录网站并使用 pandas
- pyspark - 将嵌套列表转换为数据框:Pyspark