为什么我的合并失败了?map()查找()[javascript]
在尝试使用map()和find()合并数据以合并两个对象数组时,我一直遇到问题,通常会收到类似于为什么我的合并失败了?map()查找()[javascript],javascript,node.js,arrays,merge,array-map,Javascript,Node.js,Arrays,Merge,Array Map,在尝试使用map()和find()合并数据以合并两个对象数组时,我一直遇到问题,通常会收到类似于TypeError:cannotread属性“customSku”为null的内容 我选择的对象关键点是正确的,所以我想知道我尝试这样做的方式是否有内在的错误,因为有时它是有效的,有时它不是 我最近的尝试如下: const fs = require('fs') const binLocations = require("../data/json/locations.json");
TypeError:cannotread属性“customSku”为null的内容
我选择的对象关键点是正确的,所以我想知道我尝试这样做的方式是否有内在的错误,因为有时它是有效的,有时它不是
我最近的尝试如下:
const fs = require('fs')
const binLocations = require("../data/json/locations.json");
const opsuiteItems = require('../data/json/items.json')
const merged = binLocations.map((item) => {
itm = opsuiteItems.find((itm) => itm.customSku === item.customSku)
if (itm) {
return {
itemID: item.itemID,
customSku: itm.customSku,
defaultCost: itm.vendorCost,
tag: item.binLocation
}
}
})
有这样的数据:
//opsuiteItems
{
"active": true,
"customSku": "H2442",
"vendorCost": "19",
}
// binLocations
{
"itemID": "2840",
"customSku": "H2442",
"binLocation": "G"
}
这是数据量的问题还是?请尝试此代码
const merged = binLocations.filter((item) => {
return item != null && opsuiteItems.findIndex((opItem) => opItem.customSku === item.customSku) >= 0;
}).map((item) => {
const itm = opsuiteItems.find((itm) => itm.customSku === item.customSku)
if (itm) {
return {
itemID: item.itemID,
customSku: itm.customSku,
defaultCost: itm.vendorCost,
tag: item.binLocation
}
}
});
试试这个代码
const merged = binLocations.filter((item) => {
return item != null && opsuiteItems.findIndex((opItem) => opItem.customSku === item.customSku) >= 0;
}).map((item) => {
const itm = opsuiteItems.find((itm) => itm.customSku === item.customSku)
if (itm) {
return {
itemID: item.itemID,
customSku: itm.customSku,
defaultCost: itm.vendorCost,
tag: item.binLocation
}
}
});
.map
希望始终返回某些内容。使用forEach
循环并执行条件合并
const merged = [];
binLocations.forEach(item => {
const match = item && opsuiteItems.find(el => el.customSku === item.customSku);
if (match) {
merged.push({
itemID: item.itemID,
customSku: item.customSku,
defaultCost: match.vendorCost,
tag: item.binLocation
});
}
});
.map
希望始终返回某些内容。使用forEach
循环并执行条件合并
const merged = [];
binLocations.forEach(item => {
const match = item && opsuiteItems.find(el => el.customSku === item.customSku);
if (match) {
merged.push({
itemID: item.itemID,
customSku: item.customSku,
defaultCost: match.vendorCost,
tag: item.binLocation
});
}
});
这两个数组都是通过异步操作填充的吗?从错误描述中可以看出,您没有等待数组具有值,其中一个值为空。它清楚地表明您没有任何东西与opsuiteItems数组中的当前项匹配。“如果我尝试执行此操作的方式存在固有错误”-如果不打算为数组中的每个元素返回某些内容,则不应使用.map()
@nip,它们是使用require从文件导入的。@Andreas我不知道这一点。我应该怎么做呢?这两个数组都是通过异步操作填充的吗?从错误描述中可以看出,您没有等待数组具有值,其中一个值为空。它清楚地表明您没有任何东西与opsuiteItems数组中的当前项匹配。“如果我尝试执行此操作的方式存在固有错误”-如果不打算为数组中的每个元素返回某些内容,则不应使用.map()
@nip,它们是使用require从文件导入的。@Andreas我不知道这一点。我应该怎么做呢?有什么问题吗?现在,代码更新了,问题是'。现在再试一次。是的,我发现了,把它拿走了。js:21 itm=optSuiteItems.find((itm)=>itm.customSku===item.customSku)类型错误:无法读取null的属性“customSku”。它的行为就好像item.customSku不存在一样。没有定义变量,如仍然不起作用的const itm
,您的代码看起来应该处理是否缺少customSku的问题,对吗?有什么问题吗?现在,代码已更新,问题是“额外的”)。现在再试一次。是的,我发现了,把它拿走了。js:21 itm=optSuiteItems.find((itm)=>itm.customSku===item.customSku)类型错误:无法读取null的属性“customSku”。它的行为就好像item.customSku不存在一样。它没有定义变量,如const itm
,但仍然不起作用。如果缺少customSku,代码看起来应该处理,对吗?它仍然在item.customSku上失败,就好像item.customSku不存在一样。尽管确实如此。如果blockconsole.log(item,itm),您是否能够在之前控制台记录数据代码>?它记录了一些。。。也许数据丢失了某个自定义SKU,但肯定不应该。是的,它们都是console.log,哈哈,好主意哈哈。。。在数组数据中有null
。这就是原因。知道了。它在item.customSku上仍然失败,就好像item.customSku不存在一样。尽管确实如此。如果blockconsole.log(item,itm),您是否能够在之前控制台记录数据代码>?它记录了一些。。。也许数据丢失了某个自定义SKU,但肯定不应该。是的,它们都是console.log,哈哈,好主意哈哈。。。在数组数据中有null
。这就是原因。知道了。