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中保持相同的代码
发布于 2019-12-18 17:33:28
代码如下:
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);输出:
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 } ]发布于 2019-12-18 17:46:51
基本上,您可以遍历数组中的所有对象,如果当前对象的名称包含&,则使用拆分后的名称创建一个新对象并推送到新的数组中。我用克隆做了一个例子,也许你以后想在别的地方使用这个数组
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));<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
发布于 2019-12-18 18:05:19
在这句话之后,“如果我只想要这个条件,"Yello & Productions”和"Lemon & Grass“只有。”从操作中
您可以使用函数Array.prototype.reduce生成一个新的数组,该数组包含已根据上述条件处理过的对象。
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);.as-console-wrapper { max-height: 100% !important; top: 0; }
https://stackoverflow.com/questions/59388679
复制相似问题