通过比较2个数组在JavaScript中创建String变量

时间:2017-12-29 10:48:31

标签: javascript arrays

我有2个JavaScript数组,如下所示;

arr1 = [CRS02,CRS04,CRS03,CRS01,CRS05];
arr2 = [CRS02,CRS03,CRS05];

arr2包含的元素少于或等于arr1

我想创建一个如下所示的字符串。

CRS02,--,CRS03,--,CRS05

如果arr2中的元素位于arr1,则应显示其他元素应显示“ - ”。

我试过如下,

for (a = 0; a < arr1.length; a++) {
    for (c = 0; c < arr2.length; c++) {
        if (arr1[a] == arr2[c]) {
            content +=  arr2[c] + ",";
            continue;
        } else {
            content += "--,";
        }
    }
   continue;
}

    alert(content);

但工作不正常。请帮忙。

6 个答案:

答案 0 :(得分:2)

假设

  • 数组项目已排序(如果没有,则需要对它们进行排序)
  • arr2不包含任何不属于arr1的元素

使用map进行迭代并检查每个index的{​​{1}}是否不是item

-1

<强>演示

&#13;
&#13;
var output = arr1.map( s => arr2.indexOf( s ) != -1 ? s : "--" );
&#13;
&#13;
&#13;

答案 1 :(得分:0)

首先,看起来你已经用变量填充了数组。 JavaScript中的字符串以单引号('')或双引号("")开头和结尾。 我会假设它们在简单性方面是字符串。

你不需要两个循环。只需使用step计数器:

注意:此解决方案的目的是可读,以便您了解概念。当然,可以使用其他答案中建议的indexOfreduce来实施。

var arr1 = ["CRS02","CRS04","CRS03","CRS01","CRS05"];
var arr2 = ["CRS02","CRS03","CRS05"];

var content = "";

// Use length of largest array.
for (var i = 0, step = 0; i < arr1.length; ++i) {
    if (arr1[i] == arr2[step]) {
        content +=  arr1[i] + ", ";
        ++step;
    } else {
        content += "--, ";
    }
}

// Remove last comma and space.
content = content.substring(0, content.length - 2);

console.log(content);

答案 2 :(得分:0)

var arr1 = ["CRS02","CRS04","CRS03","CRS01","CRS05"];
var arr2 = ["CRS02","CRS03","CRS05"];

var str = "";
for(var i = 0; i < arr1.length; i++){
  if(arr2.indexOf(arr1[i]) >= 0){
    str += arr1[i] + ",";
  }
  else{
    str += "--"+",";
  }
}
str = str.substring(0,(str.length-1));
console.log(str);

答案 3 :(得分:0)

尝试以下方法:

var arr1 = ["CRS02","CRS04","CRS03","CRS01","CRS05"];
var arr2 = ["CRS02","CRS03","CRS05"];

function getContainsString(arr1, arr2) {
    return arr1.reduce(function(result, el) {
        return result + (arr2.indexOf(el) < 0 ? "--" : el) + ",";
    }, "").slice(0, -1);
}

console.log(getContainsString(arr1, arr2));
//CRS02,--,CRS03,--,CRS05

答案 4 :(得分:0)

如果您的数据集很大并且您不想在循环中重复使用indexOf,则可以使用Set快速检查arr2的内容:

const arr1 = ["CRS02","CRS04","CRS03","CRS01","CRS05"];
const set2 = new Set(["CRS02","CRS03","CRS05"]);

console.log(
  arr1
    .map(x => set2.has(x) ? x : "--")
    .join(",")
);

答案 5 :(得分:0)

您可以使用array#map来遍历arr1并使用array#includes来测试arr2中是否存在值。

&#13;
&#13;
var arr1 = ["CRS02","CRS04","CRS03","CRS01","CRS05"],
    arr2 = ["CRS02","CRS03","CRS05"],
    result = arr1.map(v => arr2.includes(v) ? v :'--')
                 .join(',');
console.log(result);
&#13;
&#13;
&#13;