首页 > 解决方案 > 遍历数组中的对象并根据现有属性的正则表达式匹配添加新属性

问题描述

我是 Javascript 新手,希望能得到一些帮助。

我有以下对象数组:

var data = [{
 name: 'name1',
 street: 'street2',
 person: 'person1',
 phone1: 'phone82 ',
 phone2: 'phone3'
},
{
 name: 'name2',
 street: 'street2',
 person: 'person1',
 phone1: 'phone1 ',
 phone2: 'phone2'
}]

我的目标是遍历每个对象,并通过获取每个现有属性值动态分配新属性值,并根据匹配现有属性值的正则表达式分配新属性以生成新属性值。

为此,我尝试创建以下代码,遍历每个对象,将 Regex 表达式声明为变量,然后将每个对象属性与正则表达式匹配,然后使用 map 函数添加一个条目。

代码似乎遍历每个对象,但是当我尝试动态映射每个属性时,它只匹配属性的最后一个值。

  for (var j = 0; j < data.length; j++){
  var parseaddress = new RegExp(/(.*)/);
  var street1 = data[j].street.match(parseaddress)[0]
var parsecity = new RegExp(/(.*)/)
var city = data[j].street.match(parsecity)[0]
var parsepostal = new RegExp(/(.*)/)
var postal = data[j].street.match(parsepostal)

  data.map(function(entry) {
    entry.address = street1
});

  data.map(function(entry) {
    entry.city = city
});

  data.map(function(entry) {
    entry.postalcode = postal
});


}

如果我登录data[j].street,我会在每个对象中收到所有带有关键街道的值,但是当我将正则表达式分配给每个街道属性并对其进行映射时,它只会将最后一个对象街道值与所有其他对象匹配。

如何根据现有属性的正则表达式匹配动态地将所有值分配给新属性?

标签: javascriptnode.jsarraysregexobject

解决方案


您可以使用现有的循环,map在循环内使用会导致您覆盖以前的值

  var data = [{ name: 'name1', street: 'street1', person: 'person1', phone1: 'phone82 ', phone2: 'phone3' }, { name: 'name2', street: 'street2', person: 'person1', phone1: 'phone1 ', phone2: 'phone2' }]

   for (var j = 0; j < data.length; j++){
    var parseaddress = new RegExp(/(.*)/g);
    var street1 = data[j].street.match(parseaddress)[0]
  var parsecity = new RegExp(/(.*)/g)
  var city = data[j].street.match(parsecity)[0]
  var parsepostal = new RegExp(/(.*)/g)
  var postal = data[j].street.match(parsepostal)[0]
  
    data[j].address = street1
    data[j].city = city
    data[j].postalcode = postal
  
  }
  console.log(data)


推荐阅读