簡體   English   中英

在 Javascript 中使用部分字符串匹配過濾數組

[英]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');
   }
}

問題出在其他地方。 您嘗試過的代碼應該可以查找值是否包含字符串——我已將其添加到下面的代碼段中,您會看到它有效。

問題是您如何訪問datadata.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 的一些valuenull 添加一個額外的條件修復它:

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 );

https://jsfiddle.net/76cndsp2/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM