对对象同时应用替换和筛选



我需要通过只接受具有"的结果来过滤对象;。com";在字符串中,同时也从中删除一个字符串。我可以删除字符串,结果会完美地进入我的数据库,但我很难使用过滤器。有没有一种方法可以在同一个变量companyFilter中调用replace和filter函数?

假设对象是:

[{
company: 'amazon'
companyurl:'amazon.com'
}
{
company: '400 prize money'
companyurl:'400 prize money'
}
{
company: 'facebook'
companyurl:'facebook.com'
}
{
company: 'google'
companyurl:'google.com'
}
]
const newObject = data.map((item) => {
const companyNoCom = item['companyurl'].replace(/hackerone.com//g, "")
//const companyFilter = data.filter((item) => item['company'].includes('.com'))
newItem = {...item, 
company: companyNoCom,
}

return newItem
})
console.log(newObject)

所需输出为:

[{
company: 'amazon'
companyurl:'amazon.com'
}
{
company: 'facebook'
companyurl:'facebook.com'
}
company: 'google'
companyurl:'google.com'
}
]

Array.map()始终返回所有结果,但允许更改数组中的每个对象。

另一方面,Array.filter()仅过滤并且不能更改数组中的单个对象,并且应该只返回布尔值。

如果需要首先对数据进行更改以确定是否应包含该数据,请首先对map()的结果运行.map,然后运行.filter。原始数据将保持不变,newObject将包含您的结果:

var newObject = data
.map((item) => {
item['companyurl'] = item['companyurl'].replace(/hackerone.com//g, "");
return item;
})
.filter((item) => item['companyurl'].includes('.com'));
// Note. the original data array will not be changed.

const data = [
{ company: "amazon", companyurl: "amazon.com" },
{ company: "400 prize money", companyurl: "400 prize money" },
{ company: "facebook", companyurl: "facebook.com" },
{ company: "google", companyurl: "google.com" },
];
const newObject = data.filter((item) => item.companyurl.includes(".com"));
console.log(newObject);

const data = [{
company: 'amazon',
companyurl:'amazon.com'
},
{
company: '400 prize money',
companyurl:'400 prize money'
}, 
{
company: 'facebook',
companyurl:'facebook.com'
}, 
{
company: 'google',
companyurl:'google.com'
}
]
const result = data.filter(item => item.companyurl.includes(".com")).map(item => ({...item, company: item.companyurl.split(".com")[0]}))

console.log(result)

编辑:我做了一个调整以匹配所需的输出,所以有了这个,你总是可以在stripping.com部分后从companyurl获得公司价值

您可以使用String.prototype.endsWith()检查字符串的末尾是否为.com,并通过以下方式进行筛选:

const arr = [{
company: 'amazon',
companyurl:'amazon.com'
},
{
company: '400 prize money',
companyurl:'400 prize money'
},
{
company: 'facebook',
companyurl:'facebook.com'
},
{
company: 'google',
companyurl:'google.com'
}
];

const res = arr.filter(({ companyurl }) => companyurl.endsWith('.com'));
console.log(res);

最新更新