如果你觉得这个问题有点长,请原谅.我有一个对象数组,结构如下。
let arrObj = [{
id: "test1",
value1: "a1",
value2: "b1",
},
{
id: "test2",
value1: "a2",
value2: "b2",
},
{
id: "test3",
value1: "a3",
value2: "b3",
},
{
id: "test4",
value1: "a4",
value2: "b4",
}
];
我基本上要用id来代替对象 test2
, test3
,test4
基于一些输入,其余的对象应该是不受影响的,我写了一个switch case,取三个值,然后计算,然后返回修改后的对象数组。我写了一个switch case,接受三个值,然后计算并返回修改后的对象数组。
被传递的值应该发生修改,这些值是 abc
,def
,ghi
.
基本上需要根据输入的值返回以下值value1,value2只是一些硬编码的值。
var res1 = updateValue(arrObj,"abc");
//result should be
[{
id: "test1",
value1: "a1",
value2: "b1",
},
{
id: "test2",
value1: "dsdsd",
value2: "ghasgas",
},
{
id: "test3",
value1: "dsds",
value2: "asasas",
},
{
id: "test4",
value1: "dsdsdsae",
value2: "saheuwe",
}
];
以类似的方式:
var res1 = updateValue(arrObj,"def");
//result should be
[{
id: "test1",
value1: "a1",
value2: "b1",
},
{
id: "test2",
value1: "dshds67",
value2: "sdjsahdj1213",
},
{
id: "test3",
value1: "jdshdjh123",
value2: "dkshdksj88",
},
{
id: "test4",
value1: "hjwhekjwq2123",
value2: "sjhdj2323",
}
];
还有:
var res3 = updateValue(arrObj,"ghi");
//result should be
[{
id: "test1",
value1: "a1",
value2: "b1",
},
{
id: "test2",
value1: "gahsddct21ew",
value2: "gdsaedtsasa2re",
},
{
id: "test3",
value1: "gdsdssselectdsd",
value2: "ghiasaselect3we",
},
{
id: "test4",
value1: "ghdsiselectdsdre",
value2: "ghdsiselectr4"
}
];
代码,我已经试过了。
function updateValue(obj, value) {
let defaultObj = {
id: ""
}
var newObj = {};
switch (value) {
case "abc":
newObj.value1 = "abcselect21"
newObj.value2 = "abcselect22"
break;
case "def":
newObj.value1 = "defselect21";
newObj.value2 = "defselect22"
break;
case "ghi":
newObj.value1 = "ghiselect21";
newObj.value2 = "ghiselect22"
break;
}
finalArr = [{
...defaultObj,
...newObj
}];
return finalArr;
}
回答数据简化到一定程度,以至于隐藏了你的初衷的问题,总是很有挑战性。不管怎么说,我可能会这样分解这个问题-------------------------------------------------------------。
// generics
const identity = x => x
const update1 = (o = {}, [ k = "", t = identity ]) =>
({ ...o, [k]: t(o[k]) })
const update = (o = {}, patch = {}) =>
Object.entries(patch).reduce(update1, o)
// specifics
const transform = ([ defaults, ...more ], str = "") =>
[ defaults
, ...more.map(item =>
update(item, {
value1: v => `${str}select${getId(v)}1`,
value2: v => `${str}select${getId(v)}2`
})
)
]
const getId = (s = "") =>
s.match(/\d+/) || 0
// test
const arrObj =
[ {id:"test1",value1:"a1",value2:"b1"}
, {id:"test2",value1:"a2",value2:"b2"}
, {id:"test3",value1:"a3",value2:"b3"}
, {id:"test4",value1:"a4",value2:"b4"}
]
const result =
transform(arrObj, "xyz")
console.log(result)
这样的东西可能会有帮助。
var arrObj = [
{
id: "test1",
value1: "a1",
value2: "b1"
},
{
id: "test2",
value1: "a2",
value2: "b2"
},
{
id: "test3",
value1: "a3",
value2: "b3"
},
{
id: "test4",
value1: "a4",
value2: "b4"
}
];
var keyList = ["test2", "test3", "test4"];
mapObject(keyList, "abc");
function mapObject(filterList, param) {
let newArray = arrObj
.filter(item => filterList.findIndex(val => val == item.id) != -1)
.map(function(currentValue, index) {
currentValue.value1 = param + "select" + (index + 1).toString() + "1";
currentValue.value2 = param + "select" + (index + 1).toString() + "2";
return currentValue;
})
.concat(
arrObj.filter(item => filterList.findIndex(val => val == item.id) == -1)
);
console.log(newArray);
}
在更新值之前,你应该先检查id。试试这个函数。
function updateValue(obj, value) {
const finalArray = [];
for (const item of obj) {
const matches = item.id.match(/test([234])/);
if (matches) {
const testId = matches[1];
finalArray.push({
id: item.id,
value1: `${value}select${testId}1`,
value2: `${value}select${testId}2`,
});
} else {
finalArray.push({ ...item });
}
}
return finalArray;
}
我已经按照你的要求更新了你的代码,并附上了代码片段,只需在函数调用中按照你的要求更改值即可。var res1 = updateValue(arrObj, "def")。
arrObj = [{ id: "test1", value1: "a1", value2: "b1", }, { id: "test2", value1: "select21", value2: "select22", }, { id: "test3", value1: "select31", value2: "select32", }, { id: "test4", value1: "select41", value2: "select42", } ];
var res1 = updateValue(arrObj,"def");
console.log(res1);
function updateValue(object, value) {
var newObj = [];
switch (value) {
case "abc":
for (var obj of object){
if(obj.id != "test1"){
obj.value1 = value + obj.value1;
obj.value2 = value + obj.value2;
}
newObj.push(obj);
}
break;
case "def":
for (var obj of object){
if(obj.id != "test1"){
obj.value1 = value + obj.value1;
obj.value2 = value + obj.value2;
}
newObj.push(obj);
}
break;
case "ghi":
for (var obj of object){
if(obj.id != "test1"){
obj.value1 = value + obj.value1;
obj.value2 = value + obj.value2;
}
newObj.push(obj);
}
break;
}
return newObj;
}
如何使用 map
职能。
var arrObj = [{ id: "test1", value1: "a1", value2: "b1", }, { id: "test2", value1: "a2", value2: "b2", }, { id: "test3", value1: "a3", value2: "b3", }, { id: "test4", value1: "a4", value2: "b4", }],
filters = ['test1', 'test2', 'test4'],
givenValue = 'abc';
result = arrObj.map(({id, ...rest },i)=>{
if(filters.includes(id)) rest = { value1 : givenValue+'select2'+(i+1), value2 : givenValue+'select2'+(i+1) }
return {id, ...rest};
});
console.log(result);