[英]Filter Array Using Partial String Match in Javascript
我有一个对象数组,我需要过滤的值被埋在一个长字符串中。 数组看起来像:
{
"data": {
"value": "{\"cols\":[\"parent_sku\"],\"label\":\"Style\",\"description\":\"Enter Style.\",\"placeholderText\":\"Style 10110120103\"}",
"partnerId": 1
}
},
因此,如果我想获取 value 包括parent_sku
的所有partnerId
对象,我该怎么做?
console.log(data.value.includes('parent_sku')
返回cannot read property 'includes' of null
。
编辑:
不认为这很重要,但从回应来看,似乎确实如此。 这是 object 的完整响应:
Response body: {
"data": {
"configurationByCode": [
{
"data": {
"value": "{\"cols\":[\"parent_sku\"],\"label\":\"Style\",\"description\":\"Enter Style.\",\"placeholderText\":\"Style 10110120103\"}",
"partnerId": 1
}
}
我将其传递给可重复使用的 function 以过滤 arrays:
const parentSkuPartners = filterArray(res.body.data.configurationByCode, 'parent_sku');
Function:
function filterArray(array, filterList) {
const newList = [];
for (let i = 0; i < array.length; i += 1) {
console.log('LOG', array[i].data.value.includes('parent_sku');
}
}
问题出在其他地方。 您尝试过的代码应该可以查找值是否包含字符串——我已将其添加到下面的代码段中,您会看到它有效。
问题是您如何访问data
和data.value
。 错误消息清楚地表明它认为data.value
是 null。 我们需要查看它周围的代码才能找出问题所在。 在运行includes
function 之前,尝试仅记录以控制台data
值。
const data = { "value": "{\"cols\":[\"parent_sku\"],\"label\":\"Style\",\"description\":\"Enter Style.\",\"placeholderText\":\"Style 10110120103\"}", "partnerId": 1 }; console.log('includes?', data.value.includes('parent_sku'));
您可以按照您的建议使用data.value.includes('parent_sku')
。 这里的问题是您的 object 嵌套在未命名的 object 中。
尝试:
"data": {
"value": "{\"cols\":[\"parent_sku\"],\"label\":\"Style\",\"description\":\"Enter Style.\",\"placeholderText\":\"Style 10110120103\"}",
"partnerId": 1
}
问题是 value 的一些value
是null
。 添加一个额外的条件修复它:
if (array[i].data.value !== null) {
使用 lodash 包含和 lodash 过滤器,例如
let configurationByCode = [{
data: {
value: {
cols:["parent_sku"],
label:"Style",
description:"Enter Style.",
placeholderText:"Style 10110120103"
},
"partnerId": 1
}
}, {
data: {
value: {
cols:["nothing"],
label:"Style",
description:"Enter Style.",
placeholderText:"Style 10110120103"
},
"partnerId": 2
}
}];
let wantedData = _.filter(configurationByCode, (config) => {
return _.includes(config.data.value.cols, 'parent_sku');
});
console.log( wantedData );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.