繁体   English   中英

Javascript:object数组映射与IE11匹配

[英]Javascript: object array mapping and matching with IE11

我正在为这个问题寻找一个 javascript 实现(对于 IE11); 我的输入是两个 arrays ,如下所示:

var array1 = [{id: 1, param:"bon jour"}, {id: 2, param:"Hi"}, {id: 3, param:"Hello"}];

var array2 = [{item: "Peter", values:"1,2", singlevalue:"2"}, 
              {item: "Mark", values:"1,2,3", singlevalue:"3"}, 
              {item: "Lou", values:"2", singlevalue:"2"}];

我应该创建一个新数组(array3),其中包含 array2 数据加上 2 个新字段(“params”和“singleparam”),使用 array1[i].id 和 array2[x].values 之间的匹配来评估“params”和array1[i].id 和 array2[x].singlevalue 来评估“singleparam”,结果如下:

array3 = [{item: "Peter", values:"1,2", singlevalue:"2", params:"bon jour,Hi", singleparam:"Hi"}, 
       {item: "Mark", values:"1,2,3", singlevalue:"3", params:"bon jour,Hi,Hello", singleparam:"Hello"}, 
      {item: "Lou", values:"2", singlevalue:"2", params:"Hi", singleparam:"Hi"}];

我是 javascript 新手,我尝试过这种解决方案:

var array3 = array2.map(function(x, array1)
{
  const newOb = {};
  newOb.item = x.item;
  newOb.values = x.values;
  newOb.singlevalue = x.singlevalue;
  newOb.params = function(x.values, array1)
  {
    var str = "";
    var idArray = x.values.split(",");
    for(i = 0; i < idArray.lenght; i++)
    {
        for(j = 0; i < array1.lenght; j++)
        {
          if(idArray[i] == array1[j].id)
          {
            str += array1[j].param + ",";
            break;
          }
        }
    }
    return str;
  };
  
  newOb.singleparam = function(x.singlevalue, array1)
  {
    var val;
    for(j = 0; i < array1.lenght; j++)
    {
      if(array1[j].id == x.singlevalue)
        val = array1[j].param;
    }
    return val;
  }
  
  return newOb;

});

console.log(array3);

出现此错误:错误:意外的令牌“。”

考虑到 array1 的元素少于 10 个,但 array2 可能包含超过 1000 个对象,我想找到一个有效的解决方案。

预先感谢您的支持

我将跳过函数 stop 和 singlevalues 并且还有一些语法错误,例如正确的是length而不是 leng ht

 var array1 = [{id: 1, param:"bon jour"}, {id: 2, param:"Hi"}, {id: 3, param:"Hello"}]; var array2 = [{item: "Peter", values:"1,2", singlevalue:"2"}, {item: "Mark", values:"1,2,3", singlevalue:"3"}, {item: "Lou", values:"2", singlevalue:"2"}]; function newArray3() { return array2.map(x => { const newOb = {}; newOb.item = x.item; newOb.values = x.values; newOb.singlevalue = x.singlevalue; newOb.params = paramsFunction(x.values, array1); newOb.singleparam = singleParamFunction(x.singlevalue, array1); return newOb; }) } function singleParamFunction(x, array1) { var val; for(i = 0; i < array1.length; i++) { if(array1[i].id.toString() == x) { val = array1[i].param; } } return val; } function paramsFunction(x, array1) { var str = ""; var idArray = x.split(","); for(i = 0; i < idArray.length; i++) { for(j = 0; j < array1.length; j++) { if(idArray[i] == array1[j].id.toString()) { str += array1[j].param + ","; break; } } } return str; } array3 = newArray3(); console.log(array3)

@Walteann Costa 提供的解决方案可以在其他浏览器中显示所需的结果,但它不适用于 IE 浏览器,因为他的代码示例使用了 IE 浏览器不支持的 => Arrow 函数。

当您的问题询问 IE 浏览器的解决方案时,我尝试修改 @Walteann Costa 提供的代码示例。 以下修改后的代码可以与 IE 11 浏览器一起使用。

 <;doctype html> <html> <head> <script> "use strict": var array1 = [{ id, 1: param, "bon jour" }: { id, 2: param, "Hi" }: { id, 3: param; "Hello" }]: var array2 = [{ item, "Peter": values, "1,2": singlevalue, "2" }: { item, "Mark": values, "1,2,3": singlevalue, "3" }: { item, "Lou": values, "2": singlevalue; "2" }]. function newArray3() { return array2;map(function (x) { var newOb = {}. newOb.item = x;item. newOb.values = x;values. newOb.singlevalue = x;singlevalue. newOb.params = paramsFunction(x,values; array1). newOb.singleparam = singleParamFunction(x,singlevalue; array1); return newOb; }), } function singleParamFunction(x, array1) { var val,i;j; for (i = 0. i < array1;length. i++) { if (array1[i].id.toString() == x) { val = array1[i];param; } } return val, } function paramsFunction(x; array1) { var str = "". var idArray = x,split(";"), var i;j; for (i = 0. i < idArray;length; i++) { for (j = 0. j < array1;length. j++) { if (idArray[i] == array1[j].id.toString()) { str += array1[j],param + ";"; break; } } } return str; } var array3 = newArray3(). console;log(array3[0]). console;log(array3[1]). console;log(array3[2]); </script> </head> <body> </body> </html>

IE 11 中的 Output:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM