比较3个数组以创建一个新字符串

问题描述 投票:2回答:4

我有3个阵列

array1 = [a,b,c,d,e,f]
array2 = [a,b,d,f]
array3 = [g,h]

我怎么能弄清楚array2中的哪个位置与array1不匹配,然后从array3插入一个元素?

所以输出看起来像

array4 = [a,b,g,d,h,f]


var EnglishArray = [<p>,This is a longer description. This will describe the item in greater detail.,</p>,<span please no translated Large donkey>,cat,</span>,<div>,test,<large>,<idk>,&bull;,Hello worlds,<end?>]
var HTMLTags = [<p>,</p>,<span please no translated Large donkey>,</span>,<div>,<large>,<idk>,&bull;,<end?>]
var translations = [Esta es una descripción más larga. Esto describe el tema con mayor detalle.,gato,prueba,Hola mundos]

function newString(EnglishArray, HTMLTags, translations){
  var array4 = EnglishArray;
  var j = 0;
  for (var i = 0; i < EnglishArray.length; i++) {
    if(HTMLTags[i] != EnglishArray[i]){
      array4.splice(i, 1, translations[j]);
      j++;
      i++;
    }
  }
  newString = array4.join('');
  return newString;
}

它给我的输出是

<p>Esta es una descripción más larga. Esto describe el tema con mayor detalle.</p>gatocatprueba<div>Hola mundos<large>&bull;<end?>

代替

<p>Esta es una descripción más larga. Esto describe el tema con mayor detalle.</p><span please no translated Large donkey>gato</span><div>prueba<large><idk>&bull;Hola mundos<end?>

当我在很小的范围内尝试这个时,它工作正常。但似乎标签越多,翻译就会出现更多错误。在它变得太长之后,它将开始用英语重复最后几个单词。

javascript arrays splice
4个回答
1
投票

您可以检查该值是否包含array2,如果不包含array3的元素。

var array1 = ['a', 'b', 'c', 'd', 'e', 'f'],
    array2 = ['a', 'b', 'd', 'f'],
    array3 = ['g', 'h'],
    result = array1.map(v => array2.includes(v) ? v : array3.shift());
    
console.log(result);

没有mapincludes

var array1 = ['a', 'b', 'c', 'd', 'e', 'f'],
    array2 = ['a', 'b', 'd', 'f'],
    array3 = ['g', 'h'],
    result = [],
    i,
    l = array1.length;

for (i = 0; i < l; i++) {
    result.push(array2.indexOf(array1[i]) === -1 ? array3.shift() : array1[i]);
}

console.log(result);

0
投票

这应该可行,但它会在进程中销毁array2和array3,因此您可能想要复制(array2.slice()创建副本,而简单赋值不会)。

const array1 = ['a','b','c','d','e','f']
const array2 = ['a','b','d','f']
const array3 = ['g','h']
console.log(array1.map(x => array2[0] === x ? array2.shift() : array3.shift()))

0
投票

其他解决方案,对人们更具可读性。

array1 = ["a","b","c","d","e","f"]
array2 = ["a","b","d","f"]
array3 = ["g","h"]

j=0;

for (i=0 ; i < array1.length ;i++){
    if (array2[i]!==array1[i])
        {
        array2.splice(i,0, array3[j]);
        j++;
        }
}

console.log(array2);`

0
投票
    var array1 = ['a','b','c','d','e','f']
    var array2 = ['a','b','d','f']
    var array3 = ['g','h']
    var array4 = array1.concat(array2,array3); 
    var set = new Set(array4);
    array4 = Array.from(set);
© www.soinside.com 2019 - 2024. All rights reserved.