首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在迁移脚本中分隔并复制数组中的数据(&A)

在迁移脚本中分隔并复制数组中的数据(&A)
EN

Stack Overflow用户
提问于 2019-12-18 17:09:31
回答 3查看 44关注 0票数 0
代码语言:javascript
复制
    const cArray = [
  {
    CompanyCd: 'Yello',
    CompanyName: "Yello & Productions",
  },
  {
    CompanyCd: 'Orange & proce',
    CompanyName: "Orange & proce c/o",
  },
  {
    CompanyCd: 'Lamus & FAMOUS',
    CompanyName: "Lemon",
  }
];

另外,如果我想这个条件只对"Yello & Productions“和"Lemon & Grass”只有。

就像我正在开发一个数据迁移脚本,而这是一个我被卡住了的场景。所以这里我有一个数组,我要做的是在CompanyName中,如果其中有&,那么我想将公司与该&分开,例如,Yello将不同,生产也将不同,但将黄色和生产的相同数据复制到两个新分离的数据中。(数据将是相同的),然后在创建之后,将Yello & production标记为isdelete= true。

编辑:我也想在CompanyCd上做同样的事情。假设CompanyCd是单一的“黄色”,像没有&,那么在两个新创建的CompanyName中保持相同的代码

EN

回答 3

Stack Overflow用户

发布于 2019-12-18 17:33:28

代码如下:

代码语言:javascript
复制
var cArray = [
    {
      _id: 36,
      CompanyId: 36,
      CompanyCd: "lle",
      CompanyName: "Yello & Productions",
      Competition: false,
      ParentCompany: 4,
      isdelete: false
    },
    {
      _id: 16,
      CompanyId: 16,
      CompanyCd: "Yello",
      CompanyName: "Orange & proce c/o",
      Competition: false,
      ParentCompany: 54,
      isdelete: false
    },
    {
      _id: 46,
      CompanyId: 46,
      CompanyCd: "Yello",
      CompanyName: "Lemon",
      Competition: false,
      ParentCompany: 74,
      isdelete: false
    }
  ];
  var companyList = ["Yello & Productions"]
  var arr = [];
  cArray.map(function(element){
      var companyName  = element.CompanyName;
      if( companyList.includes(element.CompanyName) && element.CompanyName.indexOf("&") >=0){             
        var split = element.CompanyName.split("&");
        delete element['CompanyName'];
        for(let i=0;i<split.length;i++) {
            arr.push(Object.assign({}, element,{"CompanyName":split[i].trim(), "isdelete":false})); 
        }
        element.isdelete = true;
        element.CompanyName = companyName;
        arr.push(element)
      } 
      else {
        arr.push(element);           
      }
  })
console.log("aa", arr);

输出:

代码语言:javascript
复制
aa [ { _id: 36,
    CompanyId: 36,
    CompanyCd: 'lle',
    Competition: false,
    ParentCompany: 4,
    isdelete: false,
    CompanyName: 'Yello ' },
  { _id: 36,
    CompanyId: 36,
    CompanyCd: 'lle',
    Competition: false,
    ParentCompany: 4,
    isdelete: false,
    CompanyName: ' Productions' },
  { _id: 36,
    CompanyId: 36,
    CompanyCd: 'lle',
    Competition: false,
    ParentCompany: 4,
    isdelete: true,
    CompanyName: 'Yello & Productions' },
  { _id: 16,
    CompanyId: 16,
    CompanyCd: 'Yello',
    Competition: false,
    ParentCompany: 54,
    isdelete: false,
    CompanyName: 'Orange ' },
  { _id: 16,
    CompanyId: 16,
    CompanyCd: 'Yello',
    Competition: false,
    ParentCompany: 54,
    isdelete: false,
    CompanyName: ' proce c/o' },
  { _id: 16,
    CompanyId: 16,
    CompanyCd: 'Yello',
    Competition: false,
    ParentCompany: 54,
    isdelete: true,
    CompanyName: 'Orange & proce c/o' },
  { _id: 46,
    CompanyId: 46,
    CompanyCd: 'Yello',
    CompanyName: 'Lemon',
    Competition: false,
    ParentCompany: 74,
    isdelete: false } ]
票数 0
EN

Stack Overflow用户

发布于 2019-12-18 17:46:51

基本上,您可以遍历数组中的所有对象,如果当前对象的名称包含&,则使用拆分后的名称创建一个新对象并推送到新的数组中。我用克隆做了一个例子,也许你以后想在别的地方使用这个数组

代码语言:javascript
复制
const cArray = [{
    _id: 36,
    CompanyId: 36,
    CompanyCd: "lle",
    CompanyName: "Yello & Productions",
    Competition: false,
    ParentCompany: 4,
    isdelete: false
  },
  {
    _id: 16,
    CompanyId: 16,
    CompanyCd: "Yello",
    CompanyName: "Orange & proce c/o",
    Competition: false,
    ParentCompany: 54,
    isdelete: false
  },
  {
    _id: 46,
    CompanyId: 46,
    CompanyCd: "Yello",
    CompanyName: "Lemon_single",
    Competition: false,
    ParentCompany: 74,
    isdelete: false
  },
  {
    _id: 46,
    CompanyId: 46,
    CompanyCd: "Yello",
    CompanyName: "Lemon & Grass",
    Competition: false,
    ParentCompany: 74,
    isdelete: false
  }
];




function separateCompanies(originalArr) {
  var companiesArrayClone = originalArr.slice();
  let allCompaniesByCriteria = []

  companiesArrayClone.forEach(function(arrayItem) {
    let cName = arrayItem.CompanyName;


    if (cName.includes("&")) {
      arrayItem.isdelete = true;
      let companies = cName.split("&");
      for (let name of companies) {
        let oneCompany = createCompanyObj(arrayItem, name)
        allCompaniesByCriteria.push(oneCompany)
      }
    } else {
      allCompaniesByCriteria.push(arrayItem)
    }
  });
  return allCompaniesByCriteria;
}

function createCompanyObj(company, name) {
  var singleCompany = jQuery.extend({}, company)
  singleCompany.CompanyName = name
  return singleCompany;
}

let companiesSeparated = separateCompanies(cArray);

console.log("arrayItems: " + JSON.stringify(companiesSeparated, null, 2));
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

票数 0
EN

Stack Overflow用户

发布于 2019-12-18 18:05:19

在这句话之后,“如果我只想要这个条件,"Yello & Productions”和"Lemon & Grass“只有。”从操作中

您可以使用函数Array.prototype.reduce生成一个新的数组,该数组包含已根据上述条件处理过的对象。

代码语言:javascript
复制
const cArray = [  {    _id: 36,    CompanyId: 36,    CompanyCd: "lle",    CompanyName: "Yello & Productions",    Competition: false,    ParentCompany: 4,    isdelete: false  },  {    _id: 16,    CompanyId: 16,    CompanyCd: "Yello",    CompanyName: "Orange & proce c/o",    Competition: false,    ParentCompany: 54,    isdelete: false  },  {    _id: 46,    CompanyId: 46,    CompanyCd: "Yello",    CompanyName: "Lemon",    Competition: false,    ParentCompany: 74,    isdelete: false  },{    _id: 46,    CompanyId: 46,    CompanyCd: "Yello",    CompanyName: "Lemon & Grass",    Competition: false,    ParentCompany: 74,    isdelete: false  }],
      targets = [["Yello", "Productions"], ["Lemon", "Grass"]],
      result = cArray.reduce((a, c) => {
        let [left, right] = c.CompanyName.split("&")
        if (left  && right && targets.some(([l, r]) => l === left.trim() && r === right.trim())) {
          let newObj = JSON.parse(JSON.stringify(c));
          newObj.CompanyName = left.trim();
          a.push(newObj);

          newObj = JSON.parse(JSON.stringify(c));
          newObj.CompanyName = right.trim();
          a.push(newObj)

        } else a.push(c);
        return a;
      }, []);

console.log(result);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59388679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档