当前位置: 首页 > 知识库问答 >
问题:

将每个字符彼此相同的元素分组的脚本

龚睿
2023-03-14

对于输入:

[“ABC”,“DEF”,“OKG”,“FED”,“BCA”]

预期产出应为:

[“ABC”,“BCA”],[“DEF”,“FED”],[“OKG”]

这里“ABC”、“BCA”和“DEF”、“FED”包含相同的字符,而“OKG”没有包含这些字符的元素

null

const arr = ["abc", "def", "okg", "fed", "bca"];
let find = (arr) => {
  let res = [];
  for (let i = 0; i < arr.length; i++) {
    for (let j = 1; j < arr.length; j++) {
      if (arr[i].search(arr[j])) {
        res.push(arr[j]);
      }
    }

  }
  return res;
}

console.log(find(arr))

null

共有2个答案

韦望
2023-03-14

使用object.valuesgroupby(从lodash中),您可以得到一个直接的解决方案:

js prettyprint-override">import {groupBy} from "lodash"

const arr = ["abc", "def", "okg", "fed", "bca"];

const sortString = (str) => str.split("").sort().join("")
const result = Object.values(groupBy(arr, sortString));

console.log(result);

您可以将数组元素按“排序”形式分组,然后使用object.values获取输出数组。

庞安晏
2023-03-14

>

  • .search返回一个数字,指示找到匹配项的索引。检查结果不是-1,而不是检查结果是真的。但是...

    .search在这里不是正确的工具,因为它不会找到相同字符的不同组合。你需要一个不同的方法。一种方法是创建一个对象,其键是找到的字符,值是出现的次数,然后使用该对象的排序表示作为键。例如,将abcbca都转换为以下内容:

    a,1-b,1-c,1
    

    遍历输入数组,为每个字符串生成一个键,并用该键将字符串放在一个对象上。最后,取对象的值。

    null

    const strToKey = (str) => {
      const grouped = {};
      for (const char of str) {
        grouped[char] = (grouped[char] || 0) + 1;
      }
      return Object.entries(grouped)
        .sort((a, b) => a[0].localeCompare(b[0]))
        .join('-');
    };
    
    let find = (arr) => {
      const grouped = {};
      for (const str of arr) {
        const key = strToKey(str);
        grouped[key] ??= [];
        grouped[key].push(str);
      }
      return Object.values(grouped);
    }
    console.log(find(["abc", "def", "okg", "fed", "bca"]));

  •  类似资料:
    • 问题内容: 我有2个这样的Int类型的数组 我想添加每个数组的元素,例如arrayFirst [0] + arraySecond [0],arrayFirst [1] + arraySecond [1]等,然后将其分配给另一个数组,因此数组的结果将类似于 [5、7、24、29] 什么是实现这一目标的最佳实践 问题答案: 您可以像这样添加两个数组

    • 我有一个单词流,我想根据相同元素的出现对它们进行排序。 例如:{hello,world,hello} 至 你好,{你好,你好} 谢谢你

    • 问题内容: 似乎以下代码应返回true,但返回false。 这有什么意义? 问题答案: 常规()和严格()相等之间的唯一区别是,严格相等运算符禁用类型转换。由于已经在比较两个相同类型的变量,因此使用的相等运算符的类型无关紧要。 不管您使用常规相等还是严格相等,对象比较仅 在您比较相同的精确对象时得出 。 也就是说,给定,,,但。 两个不同的对象(即使它们都具有零或相同的精确属性)也永远不会相等地进

    • 我有以下任务 给定一个字符串数组,编写一个函数,返回一个对象,该对象按第一个字符对输入数组的每个元素进行分组。 我的代码在下面。我得到一个错误((加了注释)说 TypeError:无法读取未定义的属性“0” 有人能解释一下为什么它说它是未定义的吗? null null

    • 问题内容: 我要两个紧挨着。右边大约200px;并且左侧必须填满屏幕的其余宽度?我怎样才能做到这一点? 问题答案: 您可以使用 flexbox 布置物品: 这基本上只是刮擦flexbox的表面。Flexbox可以做很多令人惊奇的事情。 对于较旧的浏览器支持,可以使用CSS float 和 width 属性来解决它。

    • 问题内容: 我有大量的这种格式的元组列表。每个元组的第二个字段是类别字段。 将其分解为相同类别(A,B,C等)的子列表的最有效方法是什么? 问题答案: 使用itertools.groupby: 产量 或者,要创建一个将每个组作为子列表的列表,可以使用列表理解: to的第二个参数是一个适用于(第一个参数)中每个项目的函数。预期会传回。然后将相同的所有连续项目组合在一起。 operator.itemg