循环遍历另一个数组

时间:2018-04-09 19:31:04

标签: javascript

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"]
  }
];

如何编写简单地返回一个数组中所有关键字的函数,无论我向数据数组添加或删除多少个对象?除非我可以使用循环,否则我不想手动连接每个。

我主要想编写一个函数,可以测试数据集的任何关键字中是否有任何单词,然后返回它的名称或名称。

3 个答案:

答案 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' ]

发生什么事了?

  1. 我使用data.map( x => x.keywords ...):获取所有内部关键字数组。

  2. 我将所有内部列表连接在一起以提供最终输出。

  3. 这是一种功能性编程思维方式。 如果您需要任何帮助,请告诉我。

    尝试一下!!阅读一些关于地图功能的内容。这非常有用。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

答案 2 :(得分:-1)

可能性,但不是唯一的。

Array#filter

Array#includes

Array#map

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,以后尝试提供您尝试过的示例以及您遇到的问题的完整描述。如果您没有其他任何内容,欢迎使用伪代码。