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

时间:2018-08-29 15:47:55

标签: javascript arrays splice

我有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?>

当我以较小的比例尝试时,它可以正常工作。但是,似乎标签越多,翻译的错误就越多。时间过长后,它将开始重复英语中的最后几个单词。

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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()))

答案 2 :(得分:0)

其他解决方案,更易为人们使用。

$glob_conn = new mysqli(p:127.0.0.1, config_mysql_db_user, config_mysql_db_password, 'uni_partner');

答案 3 :(得分: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);