Javascript : 如果存在则递增名称
Javascript : Increment name if exist
我想在数组中压入一个名称,该名称将是一个默认名称。
如果名称已经存在,我需要在推送之前向它添加一个整数,如果实例存在则递增。
如果不存在,它应该创建一个实例,将在整个过程中做同样的事情,但它应该递增。
var arr = ['team banana', 'team melon', 'team melon 2', 'team orange']
var name = 'team apple'; // this is default team name
var xarr = [];
if(arr.length){
// store the all instances of 'team apple'
for(var c = 0; c <= arr.length; c++){
if(arr[c] !== undefined){
if(arr[c].indexOf('team apple') > -1){
xarr.push(arr[c].replace(/['0-9']/g,''))
}
}
}
// start the iterration
for (var k=0; k<=arr.length; k++){
// if existing
if(arr[k] !== undefined){
if(name === arr[k]) {
arr.push(name+' ' + ( xarr.length))
}else{
// if not existing creat an instance of 'team apple'
// arr.push(name) <--- this cause the browser to crash
}
}
}
xarr = []
}else{
arr.push(name )
}
console.log(arr)
我期待的结果是这样的:
['team banana', 'team melon', 'team melon 2', 'team orange','team apple','team apple 1', 'team apple 2' ...]
除了数组中没有 'team apple' 的实例外,代码块已经开始工作,它开始崩溃
如果数组看起来像这样,一切正常:
['team banana', 'team melon', 'team melon 2', 'team orange','team apple']
但是如果它看起来像这样:
['team banana', 'team melon', 'team melon 2', 'team orange']
它浏览器开始崩溃。
这是导致它的代码部分,我不知道。
if(name === arr[k]) {
arr.push(name+' ' + (xarr.length))
}else{
// if not existing creat an instance of 'team apple'
// arr.push(name) <--- this cause the browser to crash
}
我什至不确定这是否是正确的实现方式,我真的想要一个递增的名称。任何建议都会有很大的帮助。我也仅限于 ES5.
提前致谢
使用过滤器并将结果长度作为后缀要容易得多。您的代码中有很多循环,none 但需要一个循环
const arr = ['team banana', 'team melon', 'team melon 2', 'team orange']
const name = 'team apple';
function addToArr(arr, name) {
const postfix = arr.filter(e => e.replace(/\s\d+$/, '') === name).length || '';
arr.push(`${name} ${postfix}`.trim());
return arr;
}
console.log(addToArr(arr, name));
console.log(addToArr(arr, name));
console.log(addToArr(arr, name));
ES 5 版本
var arr = ['team banana', 'team melon', 'team melon 2', 'team orange']
var name = 'team apple';
function addToArr(arr, name) {
var postfix = arr.filter(function(e) { return e.replace(/\s\d+$/, '') === name}).length || '';
arr.push((name + ' ' + postfix).trim());
return arr;
}
console.log(addToArr(arr, name));
console.log(addToArr(arr, name));
console.log(addToArr(arr, name));
您只需确定数组中存在多少个要添加的团队实例。为此,您可以使用 Array.filter
(see MDN) 或您自己的过滤方法。类似于:
(() => {
let arr = ['team banana', 'team melon', 'team melon 2', 'team orange'];
const teamApple = "team apple";
addTeam(teamApple, arr);
addTeam(teamApple, arr);
addTeam(teamApple, arr);
addTeam(teamApple, arr);
addTeamAlternative(teamApple, arr);
console.log(arr);
// will it work for an empty array?
let newArr = [];
addTeamAlternative(teamApple, newArr);
addTeamAlternative(teamApple, newArr);
addTeam("team kiwifruit", newArr);
addTeam("team kiwifruit", newArr);
console.log(newArr);
// Array.filter and ES20xx
function addTeam(team, someArr) {
const nExisting = someArr.filter(teamFromArray => teamFromArray.startsWith(team)).length;
someArr.push(team + (nExisting == 0 ? "" : ` ${nExisting + 1}`));
return someArr;
}
// Your own method (a more 'classic' alternative)
function addTeamAlternative(team, someArr) {
var arrSearch = someArr.slice(0);
var value = arrSearch.shift();
var nExisting = 1;
while(value) {
nExisting += +RegExp("^" + team).test(value);
value = arrSearch.shift();
}
someArr.push(team + (nExisting > 1 ? (" " + nExisting) : ""));
return someArr;
}
})()
我想在数组中压入一个名称,该名称将是一个默认名称。
如果名称已经存在,我需要在推送之前向它添加一个整数,如果实例存在则递增。
如果不存在,它应该创建一个实例,将在整个过程中做同样的事情,但它应该递增。
var arr = ['team banana', 'team melon', 'team melon 2', 'team orange']
var name = 'team apple'; // this is default team name
var xarr = [];
if(arr.length){
// store the all instances of 'team apple'
for(var c = 0; c <= arr.length; c++){
if(arr[c] !== undefined){
if(arr[c].indexOf('team apple') > -1){
xarr.push(arr[c].replace(/['0-9']/g,''))
}
}
}
// start the iterration
for (var k=0; k<=arr.length; k++){
// if existing
if(arr[k] !== undefined){
if(name === arr[k]) {
arr.push(name+' ' + ( xarr.length))
}else{
// if not existing creat an instance of 'team apple'
// arr.push(name) <--- this cause the browser to crash
}
}
}
xarr = []
}else{
arr.push(name )
}
console.log(arr)
我期待的结果是这样的:
['team banana', 'team melon', 'team melon 2', 'team orange','team apple','team apple 1', 'team apple 2' ...]
除了数组中没有 'team apple' 的实例外,代码块已经开始工作,它开始崩溃
如果数组看起来像这样,一切正常:
['team banana', 'team melon', 'team melon 2', 'team orange','team apple']
但是如果它看起来像这样:
['team banana', 'team melon', 'team melon 2', 'team orange']
它浏览器开始崩溃。
这是导致它的代码部分,我不知道。
if(name === arr[k]) {
arr.push(name+' ' + (xarr.length))
}else{
// if not existing creat an instance of 'team apple'
// arr.push(name) <--- this cause the browser to crash
}
我什至不确定这是否是正确的实现方式,我真的想要一个递增的名称。任何建议都会有很大的帮助。我也仅限于 ES5.
提前致谢
使用过滤器并将结果长度作为后缀要容易得多。您的代码中有很多循环,none 但需要一个循环
const arr = ['team banana', 'team melon', 'team melon 2', 'team orange']
const name = 'team apple';
function addToArr(arr, name) {
const postfix = arr.filter(e => e.replace(/\s\d+$/, '') === name).length || '';
arr.push(`${name} ${postfix}`.trim());
return arr;
}
console.log(addToArr(arr, name));
console.log(addToArr(arr, name));
console.log(addToArr(arr, name));
ES 5 版本
var arr = ['team banana', 'team melon', 'team melon 2', 'team orange']
var name = 'team apple';
function addToArr(arr, name) {
var postfix = arr.filter(function(e) { return e.replace(/\s\d+$/, '') === name}).length || '';
arr.push((name + ' ' + postfix).trim());
return arr;
}
console.log(addToArr(arr, name));
console.log(addToArr(arr, name));
console.log(addToArr(arr, name));
您只需确定数组中存在多少个要添加的团队实例。为此,您可以使用 Array.filter
(see MDN) 或您自己的过滤方法。类似于:
(() => {
let arr = ['team banana', 'team melon', 'team melon 2', 'team orange'];
const teamApple = "team apple";
addTeam(teamApple, arr);
addTeam(teamApple, arr);
addTeam(teamApple, arr);
addTeam(teamApple, arr);
addTeamAlternative(teamApple, arr);
console.log(arr);
// will it work for an empty array?
let newArr = [];
addTeamAlternative(teamApple, newArr);
addTeamAlternative(teamApple, newArr);
addTeam("team kiwifruit", newArr);
addTeam("team kiwifruit", newArr);
console.log(newArr);
// Array.filter and ES20xx
function addTeam(team, someArr) {
const nExisting = someArr.filter(teamFromArray => teamFromArray.startsWith(team)).length;
someArr.push(team + (nExisting == 0 ? "" : ` ${nExisting + 1}`));
return someArr;
}
// Your own method (a more 'classic' alternative)
function addTeamAlternative(team, someArr) {
var arrSearch = someArr.slice(0);
var value = arrSearch.shift();
var nExisting = 1;
while(value) {
nExisting += +RegExp("^" + team).test(value);
value = arrSearch.shift();
}
someArr.push(team + (nExisting > 1 ? (" " + nExisting) : ""));
return someArr;
}
})()