[英]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.