var data = [
{
Name: "HR",
popularity: 91,
keywords: ["bat", "happy", "success"]
},
{
Name: "biz",
popularity: 3,
keywords: ["sad", "code", "shady"]
},
{
Name: "xyz",
popularity: 80,
keywords: ["alphabetical", "code", "trendy"]
},
{
Name: "catty",
popularity: 536,
keywords: ["code", "startup", "cats"]
}
];
如何编写简单地返回一个数组中所有关键字的函数,无论我向数据数组添加或删除多少个对象?除非我可以使用循环,否则我不想手动连接每个。
我主要想编写一个函数,可以测试数据集的任何关键字中是否有任何单词,然后返回它的名称或名称。
答案 0 :(得分:-1)
如果没有关联到原始对象的链接,为什么不创建一个基于关键字的键的字典,并将数组中的对象保存为值,它实际上并没有为连接关键字带来任何结果。
然后很容易创建一个基于1个关键字返回结果的搜索
var data = [
{
Name: "HR",
popularity: 91,
keywords: ["bat", "happy", "success"]
},
{
Name: "biz",
popularity: 3,
keywords: ["sad", "code", "shady"]
},
{
Name: "xyz",
popularity: 80,
keywords: ["alphabetical", "code", "trendy"]
},
{
Name: "catty",
popularity: 536,
keywords: ["code", "startup", "cats"]
}
];
function createKeywordSet( data ) {
return data.reduce( (dict, arrayItem) => {
arrayItem.keywords.forEach( keyword => {
if (!dict[keyword]) {
dict[keyword] = [];
}
dict[keyword].push( arrayItem );
} );
return dict;
}, {});
}
function findByKeyword( keywordSet, keyword ) {
return keywordSet[keyword] || [];
}
let set = createKeywordSet( data );
console.log( findByKeyword( set, 'code' ).map( r => r.Name ) );
console.log( findByKeyword( set, 'startup' ).map( r => r.Name ) );
console.log( findByKeyword( set, 'keyword' ).map( r => r.Name ) );
答案 1 :(得分:-1)
您可以在数组上使用 map ()js函数。 它的作用:它接受数组的每个元素并执行一个函数。
下面的代码将获取所有关键字并将它们放入数组allKeywords:
var allKeywords=[];
data.map((x)=>(allKeywords = allKeywords.concat(x.keywords)));
console.log(allKeywords);
数组allKeywords现在具有以下内容:
['bat','happy','success','sad','code','shady','alphabetical','code','trendy','code','startup','cats' ]
发生什么事了?
我使用data.map( x => x.keywords ...):获取所有内部关键字数组。
我将所有内部列表连接在一起以提供最终输出。
这是一种功能性编程思维方式。 如果您需要任何帮助,请告诉我。
尝试一下!!阅读一些关于地图功能的内容。这非常有用。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
答案 2 :(得分:-1)
可能性,但不是唯一的。
function getNames(arrayOfObjects, searchKeyword) {
return arrayOfObjects.filter((object) => {
return object.keywords.includes(searchKeyword);
}).map((object) => object.Name);
}
function includesKeyword(arrayOfObjects, searchKeyword) {
return getNames(arrayOfObjects, searchKeyword).length > 0;
}
const data = [{
Name: "HR",
popularity: 91,
keywords: ["bat", "happy", "success"]
},
{
Name: "biz",
popularity: 3,
keywords: ["sad", "code", "shady"]
},
{
Name: "xyz",
popularity: 80,
keywords: ["alphabetical", "code", "trendy"]
},
{
Name: "catty",
popularity: 536,
keywords: ["code", "startup", "cats"]
}
];
console.log(getNames(data, 'code'));
console.log(getNames(data, 'happy'));
console.log(getNames(data, 'wibble'));
console.log(includesKeyword(data, 'code'));
console.log(includesKeyword(data, 'wibble'));
欢迎来到SO,以后尝试提供您尝试过的示例以及您遇到的问题的完整描述。如果您没有其他任何内容,欢迎使用伪代码。