对于输入:
[“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
使用object.values
和groupby
(从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
获取输出数组。
>
.search
返回一个数字,指示找到匹配项的索引。检查结果不是-1,而不是检查结果是真的。但是...
.search
在这里不是正确的工具,因为它不会找到相同字符的不同组合。你需要一个不同的方法。一种方法是创建一个对象,其键是找到的字符,值是出现的次数,然后使用该对象的排序表示作为键。例如,将abc
和bca
都转换为以下内容:
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