繁体   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