我有一个对象数组,其中我需要过滤的值被埋在一个长字符串中。数组看起来像:
{
"data": {
"value": "{\"cols\":[\"parent_sku\"],\"label\":\"Style\",\"description\":\"Enter Style.\",\"placeholderText\":\"Style 10110120103\"}",
"partnerId": 1
}
},
因此,如果我想获取 value 包含 partnerId
的所有 parent_sku
对象,我该怎么做?
console.log(data.value.includes('parent_sku')
返回 cannot read property 'includes' of null
。
编辑:
认为这无关紧要,但从反应来看,似乎确实如此。这是完整的响应对象:
Response body: {
"data": {
"configurationByCode": [
{
"data": {
"value": "{\"cols\":[\"parent_sku\"],\"label\":\"Style\",\"description\":\"Enter Style.\",\"placeholderText\":\"Style 10110120103\"}",
"partnerId": 1
}
}
我将它传递给一个可重用的函数来过滤数组:
const parentSkuPartners = filterArray(res.body.data.configurationByCode, 'parent_sku');
功能:
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');
}
}
答案 0 :(得分:0)
问题出在其他地方。您尝试过的代码应该可以用于查找值是否包含字符串 - 我已将其添加到下面的代码段中,您将看到它的工作原理。
问题在于您如何访问 data
和 data.value
。错误消息明确指出它认为 data.value
为空。我们需要查看它周围的代码才能找出问题所在。在运行 data
函数之前,尝试仅通过日志记录来控制 includes
的值。
const data = {
"value": "{\"cols\":[\"parent_sku\"],\"label\":\"Style\",\"description\":\"Enter Style.\",\"placeholderText\":\"Style 10110120103\"}", "partnerId": 1
};
console.log('includes?', data.value.includes('parent_sku'));
答案 1 :(得分:0)
您可以按照您的建议使用 const path = require('path')
const fs = require('fs')
const app = require('express')()
const cacheMap = new Map()
app.get('/thumb/:index', async function (req, res) {
const { index } = req.params
if (!index) return res.status(404).send()
const jpeg = path.join(__dirname, 'thumbs', `${index}.jpg`)
if (!cacheMap.has(index)) {
console.log('reading file', jpeg)
cacheMap.set(index, await fs.promises.readFile(jpeg))
}
console.log({ index })
return res
.header('content-type', 'image/jpeg')
.status(200)
.send(cacheMap.get(index))
})
。这里的问题是您的对象嵌套在一个未命名的对象中。
试试:
data.value.includes('parent_sku')
答案 2 :(得分:0)
问题是 Observable<KeyboardEvent>
的某些值是 value
。添加一个额外的条件修复它:
null
答案 3 :(得分:0)
使用 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 );