如何解决在JavaScript中,我无法制作字符串数组的唯一值,也无法从另一个数组中排除确定的值
只有两个问题:
- 在迭代和控制流中,我无法使字符串数组的值唯一。在我的测试中,迭代和控制流将值重复了18次,我尝试以不同的方式更改很多代码,但未成功。
- 我从How can I remove a specific item from an array?中学到了东西,但是我的情况有所不同,因为两个关联文件夹是不同的。我会解释:
let titles = ["Adwaita++","Suru++","Yaru++"];
let styles = ["adwaita","suru","yaru"];
let categories = ["documents","git","github","gitlab","mac","pictures","musics","script","templates","videos"];
let colours = ["60spsychodelic","90ssummer","adwaita","blue","bluegray","bordeaux","brown","canonical","cyberpunk","green","orange","red","vermillion","yellow"];
Adwaita ++,Suru ++和Yaru ++是图标主题的名称,样式是图标主题,颜色是文件夹颜色。几乎所有图标主题都具有所有类别(相同数量)和相同数量的颜色,但是Adwaita ++没有文件夹颜色,例如60spsychodelic
和90ssummer
,这是Suru ++所不具备的。 Suru ++也没有某些文件夹颜色,例如canonical
和vermillion
。然后,我想排除或删除这些值。
您会看到字符串titles
或styles
和colours
的数组完全不同。
因此,我构建了迭代和三个控制流:
for (let a = 0; a < titles.length; a++)
{
const tt = titles[a];
for (let i = 0; i < styles.length; i++)
{
const style = styles[i];
if (style == "adwaita")
{
html+= '<h1>' + titles[0] + '</h1>';
for (let j = 0; j < categories.length; j++)
{
const category = categories[j];
for (let k = 0; k < colours.length; k++)
{
const colour = colours[k];
html+= "<p><code>"+styles[0]+"-plus/folder-"+category+"-"+colour+".svg</code></p>";
}
}
}
else if (style == "suru")
{
html+= '<h1>' + titles[1] + '</h1>';
for (let j = 0; j < categories.length; j++)
{
const category = categories[j];
for (let k = 0; k < colours.length; k++)
{
const colour = colours[k]
html+= "<p><code>"+styles[1]+"-plus/folder-"+category+"-"+colour+".svg</code></p>";
}
}
}
else
{
html+= '<h1>' + titles[2] + '</h1>';
for (let j = 0; j < categories.length; j++)
{
const category = categories[j];
for (let k = 0; k < colours.length; k++)
{
const colour = colours[k];
html+= "<p><code>"+styles[2]+"-plus/folder-"+category+"-"+colour+".svg</code></p>";
}
}
}
}
}
document.write(html);
现在,我们去:
else if (style == "suru")
{
html+= '<h1>' + titles[1] + '</h1>';
for (let j = 0; j < categories.length; j++)
{
const category = categories[j];
for (let k = 0; k < colours.length; k++)
{
const colour = colours[k]
html+= "<p><code>"+styles[1]+"-plus/folder-"+category+"-"+colour+".svg</code></p>";
}
}
}
在此迭代colour
中,我尝试编写从How can I remove a specific item from an array?获得的代码,这些代码将删除Suru ++中不存在的颜色。
好吧,我想到了:
let colours = ["60spsychodelic=[suru]","90ssummer=suru]","vermillion=[yaru]","yellow"];
必须很好,但是Adwaita ++也需要vermillion
,如果我删除了[yaru]
,它最终将被包含在Suru ++中,这是不好的。
只有这两个问题我无法解决。尽管我更喜欢伪代码和简单的代码,但是只有您愿意时,您才可以自由编写精简版本。
您可以检查并了解:https://github.com/gusbemacbe/suru-plus-folders/blob/master/languages/en.md
以下是准备好的摘要,供您测试,以查找其重复值组18次的原因。
var html = '';
let titles = ["Adwaita++","Yaru++"];
let styles = ["adwaita","yaru"];
let categories = ["documents","videos"];
let colours = ["60spsychodelic","yellow"];
for (let a = 0; a < titles.length; a++) {
const tt = titles[a];
for (let i = 0; i < styles.length; i++) {
const style = styles[i];
if (style == "adwaita") {
html += '<h1>' + titles[0] + '</h1>';
for (let j = 0; j < categories.length; j++) {
const category = categories[j];
for (let k = 0; k < colours.length; k++) {
const colour = colours[k];
html += "<p><code>" + styles[0] + "-plus/folder-" + category + "-" + colour + ".svg</code></p>";
}
}
} else if (style == "suru") {
html += '<h1>' + titles[1] + '</h1>';
for (let j = 0; j < categories.length; j++) {
const category = categories[j];
for (let k = 0; k < colours.length; k++) {
const colour = colours[k];
html += "<p><code>" + styles[1] + "-plus/folder-" + category + "-" + colour + ".svg</code></p>";
}
}
} else {
html += '<h1>' + titles[2] + '</h1>';
for (let j = 0; j < categories.length; j++) {
const category = categories[j];
for (let k = 0; k < colours.length; k++) {
const colour = colours[k];
html += "<p><code>" + styles[2] + "-plus/folder-" + category + "-" + colour + ".svg</code></p>";
}
}
}
}
}
document.write(html);
解决方法
为解决此问题,我们应使用Set()
,Set;
但是我们还必须将Set
转换为普通的array
才能使用join
属性显示html。
var html = '';
let titles = ["Adwaita++","Suru++","Yaru++"];
let styles = ["adwaita","suru","yaru"];
let categories = ["documents","git","github","gitlab","mac","pictures","musics","script","templates","videos"];
let colours = ["60spsychodelic","90ssummer","adwaita","blue","bluegray","bordeaux","brown","canonical","cyberpunk","green","orange","red","vermillion","yellow"];
let Set_html = new Set();
for (let a = 0; a < titles.length; a++) {
const tt = titles[a];
//console.log(a)
for (let i = 0; i < styles.length; i++) {
const style = styles[i];
if (style == "adwaita") {
let fake_colours = JSON.parse(JSON.stringify(colours))
fake_colours.splice(0,2)
Set_html.add(`<h1>${titles[0]}</h1>`)
for (let j = 0; j < categories.length; j++) {
const category = categories[j];
for (let k = 0; k < fake_colours.length; k++) {
const colour = fake_colours[k];
Set_html.add(`<p><code>${styles[0]}-plus/folder-${category}-${colour}.svg</code></p>`);
}
}
}
else if (style == "suru") {
Set_html.add(`<h1>${titles[2]}</h1>`)
let fake_colours = JSON.parse(JSON.stringify(colours))
fake_colours.splice(fake_colours.indexOf('canonical'),1)
fake_colours.splice(fake_colours.indexOf('vermillion'),1)
for (let j = 0; j < categories.length; j++) {
const category = categories[j];
for (let k = 0; k < fake_colours.length; k++) {
const colour = fake_colours[k];
Set_html.add(`<p><code>${styles[1]}-plus/folder-${category}-${colour}.svg</code></p>`);
}
}
}
else {
Set_html.add(`<h1>${titles[2]}</h1>`)
for (let j = 0; j < categories.length; j++) {
const category = categories[j];
for (let k = 0; k < colours.length; k++) {
const colour = colours[k];
Set_html.add(`<p><code>${styles[2]}-plus/folder-${category}-${colour}.svg</code></p>`);
}
}
}
}
}
let newArray = Array.from(Set_html).join('')
document.write(newArray)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。