提问人:Alvaro Vasquez 提问时间:10/6/2023 最后编辑:Alvaro Vasquez 更新时间:10/16/2023 访问量:145
只需使用 FOR 循环: 如何将一个数组分成 2 个数组?[复制]
JUST USING THE FOR LOOP: how to divide an array into 2 arrays? [duplicate]
问:
我正在尝试将这个数组变成 2 个不同的数组。一个数组应包含包含字母“o”的名称,第二个数组应是其余不包含“o”的名称。
我只能使用 for 循环,唯一可以使用的方法是 .push()。
给定数组:
var names = ['octavia', 'peter', 'olive', 'ava', 'aiden'];
期望结果:
var nameO = ['octavia', 'olive'];
var nameNoO = ['peter', 'ava', 'aiden'];
这是我想出的代码。得到了带有“o”的名称的结果之一,但不是没有“o”的名称。
var names = ['octavia', 'peter', 'olive', 'ava', 'aiden'];
var namesO = [];
var namesNoO = [];
for(let i in names){
for(let j in names[i]){
if(names[i][j] === 'o'){
namesO.push(names[i]);
}
if(names[i][j] !== 'o'){
namesNoO.push(names[i])
}
}
}
console.log(namesO, namesNoO);
答:
-1赞
Damian Chudobiński
10/6/2023
#1
您可以使用数组函数来过滤项目。对于每个字符串,您可以使用它来检查它是否包含字母“o”。该函数在比较输入字符串之前将输入字符串转换为小写,确保这适用于大写字母和小写字母。.filter
.includes
.toLowerCase
var names = ['John', 'Alice', 'Bob', 'Carol', 'Oliver', 'Sophia'];
var namesWithO = names.filter(name => name.toLowerCase().includes('o'));
var namesWithoutO = names.filter(name => !name.toLowerCase().includes('o'));
或
var names = ['John', 'Alice', 'Bob', 'Carol', 'Oliver', 'Sophia'];
var namesWithO = [];
var namesWithoutO = [];
names.forEach(name =>
{
if (name.toLowerCase().includes('o'))
{
namesWithO.push(name);
}
else
{
namesWithoutO.push(name);
}
});
评论
1赞
maxpelic
10/6/2023
从字面上看,只是输入了这个答案
0赞
Ayoub k
10/6/2023
Includes
将检查所有文本,而不仅仅是第一个字母。
1赞
Damian Chudobiński
10/6/2023
是的,正如问题所提到的,它还没有开始,所以这里包括是正确的
0赞
Alexander Nenashev
10/6/2023
它是 O(n*2),可以是 O(n)
0赞
derpirscher
10/7/2023
@AlexanderNenashev 严格来说,O(n) 和 O(2n) 之间没有绝对的区别
-1赞
AJ Michels
10/6/2023
#2
您应该花一些时间熟悉 Array 原型中的所有各种函数。
说你想“拆分”一个数组表明你正在寻找 Array.prototype.slice()。
但是,您的示例表明您真正想要做的是过滤数组。为此,您需要使用 Array.prototype.filter()
函数。
const names = ['octavia', 'peter', 'olive', 'ava', 'aiden'];
const withNoO = name => !name.includes('o');
const withO = name => name.includes('o');
const nameO = names.filter(withO);
// ['octavia', 'olive'];
const nameNoO = names.filter(withNoO)
// ['peter', 'ava', 'aiden'];
我正在使用“箭头函数”来使代码更紧凑。这也可以像这样完成:
function withNoO(name) {
return !name.includes('o');
}
function withO(name) {
return name.includes('o');
}
const nameO = names.filter(withO);
// ['octavia', 'olive'];
const nameNoO = names.filter(withNoO)
// ['peter', 'ava', 'aiden'];
-3赞
Jordy
10/6/2023
#3
您可以使用 include 进行条件匹配。
var names = ['octavia', 'peter', 'olive', 'ava', 'aiden'];
var namesO = [];
var namesNoO = [];
for(var i=0, l = names.length; i < l; i++) {
if(names[i].toLowerCase().includes("o")){
namesO.push(names[i]);
}
if(!names[i].toLowerCase().includes("o")){
namesNoO.push(names[i]);
}
}
console.log(namesO,namesNoO);
评论
3赞
Alexander Nenashev
10/6/2023
最慢的到期和双倍.一个糟糕的选择toLowerCase()
includes('o')
评论
if(names[i][j] !== 'o')
将至少一个字符不同的所有名称推送到数组中。对于您的工作方法,您必须遍历完整名称,并且仅当未找到时,才将其添加到数组中o
noO
o
noO