javascript - 如何简化比较两个对象数组的这个js函数
问题描述
我试图通过将两个对象数组与字段进行比较来列出所有不匹配的值。
截至目前,此代码在数据量较少的情况下运行良好。但是当我传递大量数据时,这意味着这段代码会消耗更多时间。那么,有没有可能简化这个 for 循环。
目前我的输出像
[ 'product1', 'product2' ]
[ 41 ]
但是,我期待像
product_name: [ 'product1', 'product2' ]
product_quantity: [ 41 ]
var newProductArray = [
{
"product_item_number" : 12345,
"product_name" : "product1",
"product_quantity" : 7,
"product_cost" : 12
},
{
"product_item_number" : 8888,
"product_name" : "product2",
"product_quantity" : 5,
"product_cost" : 56
},
{
"product_item_number" : 1111,
"product_name" : "product3",
"product_quantity" : 3,
"product_cost" : 73
},
{
"product_item_number" : 5555,
"product_name" : "product5",
"product_quantity" : 41,
"product_cost" : 90
},
]
var oldProductArray = [
{
"product_item_number" : 12345,
"product_name" : "product 123",
"product_quantity" : 7,
"product_cost" : 12
},
{
"product_item_number" : 8888,
"product_name" : "product2 sample",
"product_quantity" : 5,
"product_cost" : 56
},
{
"product_item_number" : 789,
"product_name" : "product3",
"product_quantity" : 3,
"product_cost" : 73
},
{
"product_item_number" : 5555,
"product_name" : "product5",
"product_quantity" : 0,
"product_cost" : 90
},
]
function compareData(){
let productNames = []
let productsCost = []
for (var i = 0; i < newProductArray.length; i++) {
for (var j = 0; j < oldProductArray.length; j++) {
if (newProductArray[i].product_item_number === oldProductArray[j].product_item_number) {
if(newProductArray[i].product_name != oldProductArray[i].product_name){
productNames.push(newProductArray[i].product_name)
}
if(newProductArray[i].product_quantity != oldProductArray[i].product_quantity){
productsCost.push(newProductArray[i].product_quantity)
}
}
}
}
console.log(productNames)
console.log(productsCost)
}
compareData()
解决方案
试试这个。您使用了两个 for 循环,而这可以通过使用一个数组映射来完成 :-)
function compareData(){
let productNames = []
let productsCost = []
newProductArray.map((newProd,index) => {
newProd.product_item_number === oldProductArray[index].product_item_number ?
newProd.product_name != oldProductArray[index].product_name ?
productNames.push(newProd.product_name) : null : null
newProd.product_quantity !== oldProductArray[index].product_quantity ? productsCost.push(newProd.product_quantity) : null
})
console.log(productNames)
console.log(productsCost)
}
推荐阅读
- node.js - 如何使用永久节点将日期时间放入日志文件中
- puppeteer - 是否可以知道正在下载的文件的名称或在下载前设置名称?
- android-studio - 如何启动 Android Studio 以拥有该窗口?
- .htaccess - 针对 m 和 m/
- c++ - 在 openCL 中的非整数上实现 atom_add 函数,具有较旧计算能力的设备
- json - 如何通过逻辑应用中的表达式语法访问数组值
- bash - 使用特定文件复制目录
- c# - 无法将第二个参数传递给带有两个参数的 WCF 服务
- python - 如何使用 Zappa 从 Django lambda 部署将文件上传到 S3 存储桶?
- jquery - 如何使用 Jquery 获取 td 值并存储在数组中?