Javascript中合并两个字典对象时的换行问题

Javascript中合并两个字典对象时的换行问题,javascript,Javascript,我花了一些时间寻找答案,并实施了许多解决方案,但都不起作用。基本上,我在javascript中有两个dictionary对象,当我使用console.log时,它们如下所示: obj1 = {"\n key1\n ":["\n a\n ","\n b\n "], "\n key2\n":["\n f\n ","\n e\n"], "\n key3\n ":["\n fda\n", "\n das\n"]} obj2 = {"key2":["h","

我花了一些时间寻找答案,并实施了许多解决方案,但都不起作用。基本上,我在javascript中有两个dictionary对象,当我使用console.log时,它们如下所示:

obj1 = {"\n  key1\n  ":["\n   a\n   ","\n    b\n "], "\n  key2\n":["\n  f\n  ","\n   e\n"], "\n   key3\n    ":["\n  fda\n", "\n    das\n"]}

obj2 = {"key2":["h","k","z"], "key3":["zzz","bbb"}

我想将这两个对象合并到以下对象中:

obj3 = {"key1":["a","b"], "key2":["f","e","h", "k","z"], "key3":["fda", "das","zzz","bbb"]}
我尝试使用:

obj3= Object.assign({},obj1, obj2);
但结果是:

obj3 = {"\n  key1\n  ":["\n   a\n   ","\n    b\n "], "\n  key2\n":["\n  f\n  ","\n   e\n"], "\n   key3\n    ":["\n  fda\n", "\n    das\n"], "key2":["h","k","z"], "key3":["zzz","bbb"]}
很明显,由于这些换行符,键不匹配。我尝试编写一个循环来删除换行符,但没有成功:

          function linebreak(obj) {
            for (var key in obj) {
              obj[key].toString().replace(/\n/g, "");
            }
          }
          linebreak(obj1)

功能饰件可在以下方面提供帮助:

var str=\n key1\n; var trimmedStr=str.trim; console.logstr; 控制台。logstr.trim 测试用例

obj1 = { 
"\n  key1\n  ": ["\n   a\n   ", "\n    b\n "],
"\n  key2\n": ["\n  f\n  ", "\n   e\n"],
"\n   key3\n    ": ["\n  fda\n", "\n    das\n"] }

obj2 = {"key2":["h","k","z"], "key3":["zzz","bbb"]}

=>  key1: (2) ["a", "b"]
    key2: (5) ["f", "e", "h", "k", "z"]
    key3: (4) ["fda", "das", "zzz", "bbb"]
希望能有帮助

result = {}
for (var obj in obj1) {
    let key = obj.toString().match(/key[0-99]/)[0];
    let values = obj1[obj].map((post) => post.toString().match(/\w+/)[0]);
    if (!result.hasOwnProperty(key)){
        result[key] = [... values];
    }
    else {
        result[key].push(... values);
    }
}

for (var obj in obj2) {
    let key = obj.toString().match(/key[0-99]/)[0];
    let values = obj2[obj].map((post) => post.toString().match(/\w+/)[0]);
    if (!result.hasOwnProperty(key)){
        result[key] = [... values];
    }
    else {
        result[key].push(... values);
    }
}
console.log(result)

可以修剪格式错误的对象中的所有键和值,并使用匹配键连接数组:

const obj1={\n key1\n:[\n a\n\n b\n],\n key2\n:[\n f\n\n e\n],\n key3\n:[\n fda\n\n das\n]} 常量obj2={key2:[h,k,z],key3:[zzz,bbb]} 常量结果=Object.keysobj1 .reduceAC,键=>{ …acc, [键.微调]:obj1[键] .mapval=>val.trim .concatobj2[键.修剪]| |[] }, {};
console.logresultw您在哪里获取这些对象?我会在源头修复它,而不是在事后试图修复它…@来自仙境的异端猴子…@提姆可能来自外太空?要到达这些物体还有很长的路要走。是的,他们来自仙境。。。我宁愿在这里解决问题,也不愿一路回头:。请帮忙!!这类问题往往会累积起来。如果您现在只修复这个特定的客户端用例,那么使用相同数据或部分数据的其他用例也将需要修复。这里的问题是,对象的键是不可变的+替换不到位。如果能正确地用于这个案例,修剪本身将是一个很好的解决方案。我需要将/n替换到位。但我现在有了一个解决办法。谢谢:谢谢你的代码。我遇到了无法读取属性0的null错误。但我现在从下面得到了一个解决方案:您能帮我进一步吗?因为代码设计有问题。与我的示例中的所有键一样,它可以完美地处理具有多个值的键。但是,如果我在obj1\n key4\n:[\n value4\n]中插入一个只有一个值的键,我会遇到错误:object.map不是函数。我试着像这样修复它:Array.prototype.slice.callobj1[key].mapval=>val.trim然而,这个修复最终将该键的单个值标记化,以便将其转换为数组键4:[,v,a,l,u,e,4],我非常感谢!!!