代码战争:哪些在?字典顺序(Javascript)

代码战争:哪些在?字典顺序(Javascript),javascript,sorting,lexicographic-ordering,Javascript,Sorting,Lexicographic Ordering,我目前正在用javascript解决代码战中的以下问题。 问题如下: function inArray(array1,array2){ var result = []; var newResult = []; for(var i = 0; i < array2.length; i++) { for(var j = 0; j < array1.length; j++) { if(array2[i].includes(array1[j])) {

我目前正在用javascript解决代码战中的以下问题。 问题如下:

function inArray(array1,array2){
  var result = [];
  var newResult = [];

  for(var i = 0; i < array2.length; i++) {
    for(var j = 0; j < array1.length; j++) {
      if(array2[i].includes(array1[j])) {
        result.push(array1[j])
      }
    }
  }

  for(var k = 0; k < result.length; k++) {
    if(result[k] !== result[k+1]) {
      newResult.push(result[k]);
    }
  }

  return newResult.sort();
}
“给定两个字符串数组a1和a2,返回按a1字符串字典顺序排序的数组r,a1字符串是a2字符串的子字符串。”

下面是我为这个问题编写的代码:

function inArray(array1,array2){
  var result = [];
  var newResult = [];

  for(var i = 0; i < array2.length; i++) {
    for(var j = 0; j < array1.length; j++) {
      if(array2[i].includes(array1[j])) {
        result.push(array1[j])
      }
    }
  }

  for(var k = 0; k < result.length; k++) {
    if(result[k] !== result[k+1]) {
      newResult.push(result[k]);
    }
  }

  return newResult.sort();
}
我的代码似乎通过了所有的示例测试,但我无法通过所有的规范。它说我10个规格中有5个不合格。 我不知道为什么我不符合这些规格。
我的代码有问题吗?或者有什么方法可以改进我的代码吗?

我建议更改for循环(从
array1
开始,而不是
array2
),并在找到项目时使用标签跳过内部循环

使用此方法,您不需要过滤结果中的重复项

函数inaray(array1,array2){
变量i,j,结果=[];
外部:用于(j=0;j

.as console wrapper{max height:100%!important;top:0;}
并不是说你应该要求解决kata上的堆栈溢出问题,而是因为你已经差不多做到了,所以这里有我的想法

首先,当不确定最终测试失败的原因时,请使用console.log()并查看正在测试的值,甚至可能是预期结果(取决于kata的编写方式)

其次,您的解决方案不起作用,因为您在最终答案中包含了双重/重复项

我目前正在使用集合来消除JS代码中的重复项。集合只包含唯一的值,非常酷。如果在代码中添加以下三行而不是当前返回,则应通过所有测试:

var setOfRes = new Set(newResult.sort());
var array = Array.from(setOfRes);
return array;
是的,我正在从一个数组转换为一个集合,以消除重复项,然后再转换回一个数组。这可以用很多其他的方法来完成,但是集合是一个很好的工具,所以这里是我的建议。

您需要使用.sort()

function inArray(arrA, arrB){
  let arr = arrB.join(" ")
  return arrA.filter(item => arr.search(item) !== -1 && item !== undefined ).sort()

}
函数inaray(array1,array2){
var x;
变量y;
var r=[];
对于(x=0;x
请为您的解决方案添加一些解释let arr=arrB.join(“”//将其arrB转换为以“”分隔的字符串,然后我过滤包含要查找的单词的arrA。如果arrA中的字符串或项目也位于(由“”分隔的arr字符串)中,且项目未定义,则将其添加到由filter方法创建的新列表中。您可以编辑答案。如果搜索包含
,则解决方案将失败。例:
[“ab”,“cd”][“bc”]
“bc”
假阳性。抓得好!我认为我需要将
javascript arrB.join(“”)更改为
javascript arrB.join(“”)
function inArray(array1,array2){
  var x;
  var y;
  var r = [];
  for (x = 0; x < array1.length; x++) { 
    for (y = 0; y < array2.length; y++) {
      if(array2[y].includes(array1[x]) === true){
          r.push(array1[x]);
      }else{

      }
    }
  }
  r = [...new Set(r)];
  return r.sort();
}