如果对象属性具有特定的定界符,如何拆分JavaScript数组元素

如果对象属性具有特定的定界符,如何拆分JavaScript数组元素,javascript,arrays,json,parsing,split,Javascript,Arrays,Json,Parsing,Split,我有一个对象数组,其中一些对象的属性中有逗号。我要做的是,如果该对象有一个属性,其中有逗号,我要将其拆分为一个新对象,并递归地将所有其他属性复制到一个新数组元素中 例如: 我需要转换此对象数组: [ { prop1: ' text1 , text2 , text3 ', prop2: 'stuff1', prop3: 'stuff1', prop4: 'stuff1', prop5: 'https://www.stuff1.com' }, {

我有一个对象数组,其中一些对象的属性中有逗号。我要做的是,如果该对象有一个属性,其中有逗号,我要将其拆分为一个新对象,并递归地将所有其他属性复制到一个新数组元素中

例如: 我需要转换此对象数组:

[ { 
    prop1: ' text1 , text2 , text3 ',
    prop2: 'stuff1',
    prop3: 'stuff1',
    prop4: 'stuff1',
    prop5: 'https://www.stuff1.com' },

  { 
    prop1: ' text1 , text2 , text3 ',
    prop2: 'stuff2',
    prop3: 'stuff2',
    prop4: 'stuff2',
    prop5: 'https://www.awefewfew.com' },

 ]
为此:

[ { 
    prop1: 'text1',
    prop2: 'stuff1',
    prop3: 'stuff1',
    prop4: 'stuff1',
    prop5: 'https://www.stuff1.com' },

    { 
    prop1: 'text2',
    prop2: 'stuff1',
    prop3: 'stuff1',
    prop4: 'stuff1',
    prop5: 'https://www.stuff1.com' },

    { 
    prop1: 'text3 ',
    prop2: 'stuff1',
    prop3: 'stuff1',
    prop4: 'stuff1',
    prop5: 'https://www.stuff1.com' },   

  { 
    prop1: 'text1',
    prop2: 'stuff2',
    prop3: 'stuff2',
    prop4: 'stuff2',
    prop5: 'https://www.awefewfew.com' },

      { 
    prop1: 'text2',
    prop2: 'stuff2',
    prop3: 'stuff2',
    prop4: 'stuff2',
    prop5: 'https://www.awefewfew.com' },

      { 
    prop1: 'text3',
    prop2: 'stuff2',
    prop3: 'stuff2',
    prop4: 'stuff2',
    prop5: 'https://www.awefewfew.com' },  
 ]
通过在prop1处拆分,然后递归地将所有其他属性复制到新的数组元素中

编辑: 我可以在谷歌表单中找到它,但无法将其移植到vanilla JS:

function splitColumnAndRepeatRows(anArray, splitColumnIndex) {
  var output = [];
  for (i in anArray){ 
    var splitArray = anArray[i][splitColumnIndex].split(","); 
    for (j in splitArray){ 
      var row = anArray[i].slice(0); 
      row[splitColumnIndex] = alltrim(splitArray[j]); 
      output.push(row); 
    }
  }
  return output;
}

function alltrim(str) {
  return str.replace(/^\s+|\s+$/g, '');
}
使用.reduce对输入进行迭代,将prop1拆分为,,然后将每个值添加到输出数组中:

常量输入=[{prop1:'text1,text2,text3',prop2:'stuff1',prop3:'stuff1',prop4:'stuff1',prop5:'https://www.stuff1.com“},{prop1:'text1,text2,text3',prop2:'stuff2',prop3:'stuff2',prop4:'stuff2',prop5:'https://www.awefewfew.com'},] const-output=input.reduceacum,{prop1,…rest}=>{ 常量prop1s=prop1.trim.split','; prop1s.forEachprop1=>accum.push{ 建议1, 休息 }; 返回累计; }, []; 控制台。注销 使用.reduce对输入进行迭代,将prop1拆分为,,然后将每个值添加到输出数组中:

常量输入=[{prop1:'text1,text2,text3',prop2:'stuff1',prop3:'stuff1',prop4:'stuff1',prop5:'https://www.stuff1.com“},{prop1:'text1,text2,text3',prop2:'stuff2',prop3:'stuff2',prop4:'stuff2',prop5:'https://www.awefewfew.com'},] const-output=input.reduceacum,{prop1,…rest}=>{ 常量prop1s=prop1.trim.split','; prop1s.forEachprop1=>accum.push{ 建议1, 休息 }; 返回累计; }, []; 控制台。注销 使用reduce、split和forEach

让数据=[ { prop1:'text1,text2,text3', prop2:‘stuff1’, prop3:‘stuff1’, prop4:‘stuff1’, 建议五:'https://www.stuff1.com' }, { prop1:'text1,text2,text3', prop2:‘stuff2’, prop3:‘stuff2’, prop4:‘stuff2’, 建议五:'https://www.awefewfew.com' } ] 设res=data.reducere,obj=>{ obj.prop1.split','.forEachval=>{ re.pushObject.assign{},obj,{prop1:val.trim} } 返回re }, [] console.logres使用reduce和split以及forEach

让数据=[ { prop1:'text1,text2,text3', prop2:‘stuff1’, prop3:‘stuff1’, prop4:‘stuff1’, 建议五:'https://www.stuff1.com' }, { prop1:'text1,text2,text3', prop2:‘stuff2’, prop3:‘stuff2’, prop4:‘stuff2’, 建议五:'https://www.awefewfew.com' } ] 设res=data.reducere,obj=>{ obj.prop1.split','.forEachval=>{ re.pushObject.assign{},obj,{prop1:val.trim} } 返回re }, []
console.logres我喜欢array.concat结合reduce和map的简洁性,但显然有很多方法可以做到这一点。不清楚您的prop1字符串是否总是有空格,所以这将使用一个小正则表达式来消除它们

让arr=[{prop1:'text1,text2,text3',prop2:'stuff1',prop3:'stuff1',prop4:'stuff1',prop5:'https://www.stuff1.com“},{prop1:'text1,text2,text3',prop2:'stuff2',prop3:'stuff2',prop4:'stuff2',prop5:'https://www.awefewfew.com' },] 设final=arr.reducea,{prop1,…obj}=>a.concat prop1.trim .split/\s*,\s*/ .mapprop=>{prop1:prop,…obj} , []
console.logfinal我喜欢array.concat结合reduce和map的简洁性,但显然有很多方法可以做到这一点。不清楚您的prop1字符串是否总是有空格,所以这将使用一个小正则表达式来消除它们

让arr=[{prop1:'text1,text2,text3',prop2:'stuff1',prop3:'stuff1',prop4:'stuff1',prop5:'https://www.stuff1.com“},{prop1:'text1,text2,text3',prop2:'stuff2',prop3:'stuff2',prop4:'stuff2',prop5:'https://www.awefewfew.com' },] 设final=arr.reducea,{prop1,…obj}=>a.concat prop1.trim .split/\s*,\s*/ .mapprop=>{prop1:prop,…obj} , [] console.logfinal试试这个:

var jsonObj=[{ prop1:'text1,text2,text3', prop2:‘stuff1’, prop3:‘stuff1’, prop4:‘stuff1’, 建议五:'https://www.stuff1.com' }, { prop1:'text1,text2,text3', prop2:‘stuff2’, prop3:‘stuff2’, prop4:‘stuff2’, 建议五:'https://www.awefewfew.com' }]; var newArr=[]; 对于jsonObj中的var i{ var splitString=jsonObj[i].prop1.split','; splitString.mapitem=>{ 纽瓦尔推{ 建议1:项目, prop2:jsonObj[i].prop2, prop3:jsonObj[i].prop3, prop4:jsonObj[i].prop4, prop5:jsonObj[i].prop5 }; }; } console.lognewArr 试试这个:

var jsonObj=[{ prop1:'text1,text2,text3', prop2:‘stuff1’, prop3:‘stuff1’, prop4:‘stuff1’, 建议五:'https://www.stuff1.com' }, { prop1:'text1,text2,text3', prop2:‘stuff2’, prop3:‘stuff2’, prop4:‘stuff2’, 建议五:'https://www.awefewfew.com' }]; var newArr=[]; 对于jsonObj中的var i{ var splitString=jsonObj[i].prop1.split','; splitString.mapitem=>{ 纽瓦尔推{ 建议1:项目, prop2:jsonObj[i].prop2, prop3:jsonObj[i].prop3, prop4:jsonObj[i].prop4, prop5:jsonObj[i].prop5 }; }; }
console.lognewArr;到目前为止你试过什么吗?StackOverflow不是一个免费的代码编写服务,它希望您能够这样做。请更新您的问题,以显示您已经尝试过的内容,并显示您在某个问题中面临的具体问题。有关更多信息,请参阅,并以@Maxinef23我添加的答案为例,希望它能按照您的期望工作。Thanks@JaromandaX说得对。补充了我的想法。到目前为止你试过什么了吗?StackOverflow不是一个免费的代码编写服务,它希望您能够这样做。请更新您的问题,以显示您已经尝试过的内容,并显示您在某个问题中面临的具体问题。有关更多信息,请参阅,并以@Maxinef23我添加的答案为例,希望它能按照您的期望工作。Thanks@JaromandaX说得对。补充了我的想法。