Javascript 使用 & 加入多个数组,但我得到了重复项
Javascript join multiple arrays with & but I get duplicates
我在这个项目中创建了一个 link,其中包含多个用 & 符号连接的数组。它工作得很好,但是当我得到超过 3 个数组时,它就没有了。当我跳过几个问题时,我会在字符串的开头得到一个 & 符号,而当我只选择第一个时,它会在末尾添加一个,这是不好的。另外,如果我选择第一个和最后一个数组并跳过其余部分,则在两者之间添加一个倍数 & 而我总是只想要 1.
我用它来连接数组:
/**
* Returns the parameters for the URL.
*
* @returns {string}
*/
getLink() {
this.tmp = [];
for (let i = 0; i < this.url.length; i++) {
// Check if question is from the same quiz part and adds a , between chosen answers and add the right prefix at the beginning
if (this.url[i].length > 0) {
this.tmp.push("" + Quiz[i].prefix + this.url[i].join(","))
}
// if the link is empty remove everything that was added (& an ,)
if (this.url[i].length === 0) {
this.tmp.push("");
}
}
/// If answers are from different quiz parts add a & between answers
return "" + this.tmp.join("&");
}
Quiz 和 this.url 是数组,.prefix 和 stuff 是数组的键。
这是我用来检查 link 字符串以删除不需要的 & 符号的方法:
LinkChecker(link) {
let cleanLink = link.split('&&').join('&');
if (cleanLink[0] === '&') {
cleanLink = cleanLink.slice(1);
}
if (cleanLink[cleanLink.length - 1] === '&') {
cleanLink = cleanLink.slice(0, -1);
}
return cleanLink;
console.log(cleanLink.length)
}
这是我现在尝试的方法:
let i = 0;
let LastLink = '';
let FirstLink = LastLink;
let link = this.LinkChecker(this.getLink());
if (link[link.length -1] === '&'){
LastLink = link.slice(0, -1);
}
while(i == '&'){
if(LastLink[i] === '&'){
FirstLink = link.slice(-1, 0);
}
i++
}
console.log(FirstLink)
但它也没有真正起作用。
预览:
bd_shoe_size_ids=6621&&&
&&manufacturer_ids=5866
bd_shoe_size_ids=6598&&&manufacturer_ids=5866
它应该看起来像:
bd_shoe_size_ids=6598&manufacturer_ids=5866
您的 LinkChecker
方法只考虑成对的 &
。您可以通过拆分和过滤掉数组中的任何空条目来处理任意数量的 &
:
LinkChecker(link) {
// split by & and then filter out the blank entries
let cleanLink = link
.split('&')
.filter((section) => section !== '') // remove any empty strings
.join('&');
if (cleanLink[0] === '&') {
cleanLink = cleanLink.slice(1);
}
if (cleanLink[cleanLink.length - 1] === '&') {
cleanLink = cleanLink.slice(0, -1);
}
return cleanLink;
console.log(cleanLink.length)
}
正如其他人所提到的,有多种方法可以在您的数组创建中解决此问题,但由于您的 LinkChecker 似乎是您专门清理它们的地方,我只是为了清楚起见更改了该方法。
避免比修复更好(双重&
)。
删除 push("")
的整个块。此推送会向您的数组添加一个您根本不想拥有的条目,所以不要推送它。
我在这个项目中创建了一个 link,其中包含多个用 & 符号连接的数组。它工作得很好,但是当我得到超过 3 个数组时,它就没有了。当我跳过几个问题时,我会在字符串的开头得到一个 & 符号,而当我只选择第一个时,它会在末尾添加一个,这是不好的。另外,如果我选择第一个和最后一个数组并跳过其余部分,则在两者之间添加一个倍数 & 而我总是只想要 1.
我用它来连接数组:
/**
* Returns the parameters for the URL.
*
* @returns {string}
*/
getLink() {
this.tmp = [];
for (let i = 0; i < this.url.length; i++) {
// Check if question is from the same quiz part and adds a , between chosen answers and add the right prefix at the beginning
if (this.url[i].length > 0) {
this.tmp.push("" + Quiz[i].prefix + this.url[i].join(","))
}
// if the link is empty remove everything that was added (& an ,)
if (this.url[i].length === 0) {
this.tmp.push("");
}
}
/// If answers are from different quiz parts add a & between answers
return "" + this.tmp.join("&");
}
Quiz 和 this.url 是数组,.prefix 和 stuff 是数组的键。
这是我用来检查 link 字符串以删除不需要的 & 符号的方法:
LinkChecker(link) {
let cleanLink = link.split('&&').join('&');
if (cleanLink[0] === '&') {
cleanLink = cleanLink.slice(1);
}
if (cleanLink[cleanLink.length - 1] === '&') {
cleanLink = cleanLink.slice(0, -1);
}
return cleanLink;
console.log(cleanLink.length)
}
这是我现在尝试的方法:
let i = 0;
let LastLink = '';
let FirstLink = LastLink;
let link = this.LinkChecker(this.getLink());
if (link[link.length -1] === '&'){
LastLink = link.slice(0, -1);
}
while(i == '&'){
if(LastLink[i] === '&'){
FirstLink = link.slice(-1, 0);
}
i++
}
console.log(FirstLink)
但它也没有真正起作用。
预览:
bd_shoe_size_ids=6621&&&
&&manufacturer_ids=5866
bd_shoe_size_ids=6598&&&manufacturer_ids=5866
它应该看起来像:
bd_shoe_size_ids=6598&manufacturer_ids=5866
您的 LinkChecker
方法只考虑成对的 &
。您可以通过拆分和过滤掉数组中的任何空条目来处理任意数量的 &
:
LinkChecker(link) {
// split by & and then filter out the blank entries
let cleanLink = link
.split('&')
.filter((section) => section !== '') // remove any empty strings
.join('&');
if (cleanLink[0] === '&') {
cleanLink = cleanLink.slice(1);
}
if (cleanLink[cleanLink.length - 1] === '&') {
cleanLink = cleanLink.slice(0, -1);
}
return cleanLink;
console.log(cleanLink.length)
}
正如其他人所提到的,有多种方法可以在您的数组创建中解决此问题,但由于您的 LinkChecker 似乎是您专门清理它们的地方,我只是为了清楚起见更改了该方法。
避免比修复更好(双重&
)。
删除 push("")
的整个块。此推送会向您的数组添加一个您根本不想拥有的条目,所以不要推送它。