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("") 的整个块。此推送会向您的数组添加一个您根本不想拥有的条目,所以不要推送它。