我有一个下面的数组列表,想要从下到上分配一个值。
代码示例:
var tempArrayList=[
{org1:null,org2:"Office",org3:"HR",org4:"Payroll",org5:"Pay"},
{org1:null,org2:null,org3:"HR",org4:"Payroll",org5:"Pay"},
{org1:null,org2:"Office",org3:null,org4:null,org5:"Pay"},
{org1:null,org2:"Office",org3:"HR",org4:"Payroll",org5:"Pay"},
{org1:"head1",org2:null,org3:null,org4:"Payroll",org5:"Pay"}
];
for(var i=0;i<tempArrayList.length;i++) {
var temp=tempArrayList[i];
var org1=temp.org1;
var org2=temp.org2;
var org3=temp.org3;
var org4=temp.org4;
var org5=temp.org5;
document.write(JSON.stringify(temp));
document.writeln("<br>");
}
我的问题:如何将org2值设置为org1,org3值设置为org2 ......
//如果org1为null,则temp.org1 = temp.org2,temp.org2 = temp.org3,temp.org3 = temp.org4,temp.org4 = temp.org5
//如果org1和org2为null,那么temp.org1 = temp.org3,temp.org2 = temp.org4,temp.org3 = temp.org5,temp.org4 = null
答案 0 :(得分:1)
过滤掉value数组中的所有null,然后循环遍历键并分配过滤值或null
var tempArrayList=[
{org1:null,org2:"Office",org3:"HR",org4:"Payroll",org5:"Pay"},
{org1:null,org2:null,org3:"HR",org4:"Payroll",org5:"Pay"},
{org1:null,org2:"Office",org3:null,org4:null,org5:"Pay"},
{org1:null,org2:"Office",org3:"HR",org4:"Payroll",org5:"Pay"},
{org1:"head1",org2:null,org3:null,org4:"Payroll",org5:"Pay"}
];
tempArrayList.forEach((o) => {
const vals = Object.values(o).filter(v => v);
Object.keys(o).forEach((key, i) => o[key] = vals[i] || null);
});
console.log(tempArrayList)
.as-console-wrapper {max-height:100%!important;}
答案 1 :(得分:1)
对于假值({org1:false}
),接受的答案失败,改变原始对象并错误地假定Object.keys
按特定顺序返回。
订单Object.keys
无法保证以正确的顺序返回键数组:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
的顺序与for ... in循环
的顺序相同
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
for ... in循环以任意顺序迭代对象的属性
如果Object.keys
的代码有效,请再次尝试,但先添加:
tempArrayList = tempArrayList.map(
x =>
Object.keys(x).reverse().reduce(
(acc,key) => {acc[key]=x[key];return acc;}
,{}
)
);
这是一个不依赖于Object.keys顺序的问题的解决方案,不会变异,也不会对假成员值失败:
const collapse = function(direction,reason,subject,seed,keys){
if(Array.isArray(subject)){
keys = (function(x){
const ret = [];
while(++x<subject.length){
ret.push(x);
}
return ret;
}(-1));
}
keys =
(direction>0)
? keys
: keys.reverse();
const sortedKeys = keys.filter(
function(key){return !reason(subject[key])}
).concat(
keys.filter(
function(key){return reason(subject[key])}
)
);
return keys.reduce(
function(acc,key,index) {
acc[key] = subject[sortedKeys[index]]
return acc;
}
,seed
);
}
const collapseLeft = function(reason,keys){
return function(seed,subject){
return collapse(1,reason,subject,seed,keys);
}
};
const collapseRight = function(reason,keys){
return function(seed,subject){
return collapse(-1,reason,subject,seed,keys);
}
};
const tempArrayList=[
{org1:null,org2:"Office",org3:"HR",org4:"Payroll",org5:"Pay"},
{org1:null,org2:null,org3:"HR",org4:"Payroll",org5:"Pay"},
{org1:null,org2:"Office",org3:null,org4:null,org5:"Pay"},
{org1:null,org2:"Office",org3:"HR",org4:"Payroll",org5:"Pay"},
{org1:"head1",org2:null,org3:"Pay",org4:null,org5:null}
];
const isNull = function(x){return x===null;};
console.log(
tempArrayList.map(
function(item){
//seed can be an object ({}) or array ([]) see other log
return collapseLeft(
isNull,
["org1", "org2", "org3", "org4", "org5"]
)
({},item);
}
)
);
//collapse right example
console.log(
JSON.stringify(
collapseRight(
isNull,
["org1", "org2", "org3", "org4", "org5"]
)({},{org1:"head1",org2:null,org3:"Pay",org4:null,org5:null})
,undefined
,2
)
);
//array example (seed is [])
console.log(
JSON.stringify(
collapseRight(isNull)([],[1,2,3,null,4,null,5])
,undefined
,2
)
);
&#13;
答案 2 :(得分:0)
这是你要找的吗?
此代码遍历对象键,向上移动值并将最后一个值设置为null
。
var tempArrayList=[
{org1:null,org2:"Office",org3:"HR",org4:"Payroll",org5:"Pay"},
{org1:null,org2:null,org3:"HR",org4:"Payroll",org5:"Pay"},
{org1:null,org2:"Office",org3:null,org4:null,org5:"Pay"},
{org1:null,org2:"Office",org3:"HR",org4:"Payroll",org5:"Pay"},
{org1:"head1",org2:null,org3:null,org4:"Payroll",org5:"Pay"}
];
for (var i = 0; i < tempArrayList.length; i++) {
var keys = Object.keys (tempArrayList[i]);
for (var j = 0; j < keys.length; j++) {
if (j < keys.length - 1) {
tempArrayList[i][keys[j]] = tempArrayList[i][keys[j + 1]];
} else {
tempArrayList[i][keys[j]] = null;
}
}
}