Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象数据传递给上层对象属性_Javascript_Algorithm - Fatal编程技术网

Javascript 将对象数据传递给上层对象属性

Javascript 将对象数据传递给上层对象属性,javascript,algorithm,Javascript,Algorithm,我有一个下面的数组列表,希望从下到上分配一个值 代码示例: var tempArrayList=[ {org1:null,org2:"Office",org3:"HR",org4:"Payroll",org5:"Pay"}, {org1:null,org2:null,org3:"HR",org4:"Payroll",org5:"Pay"}, {org1:nu

我有一个下面的数组列表,希望从下到上分配一个值

代码示例:

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>");  
}
var tempArrayList=[
{org1:null,org2:Office,org3:HR,org4:Payroll,org5:Pay},
{org1:null,org2:null,org3:“人力资源”,org4:“工资单”,org5:“工资”},
{org1:null,org2:“办公室”,org3:null,org4:null,org5:“支付”},
{org1:null,org2:Office,org3:HR,org4:Payroll,org5:Pay},
{org1:“head1”,org2:null,org3:null,org4:“Payroll”,org5:“Pay”}
];

对于(var i=0;i这就是您要寻找的吗

此代码循环遍历对象键,向上移动值并将最后一个值设置为
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;
        }
    }
}
var tempArrayList=[
{org1:null,org2:Office,org3:HR,org4:Payroll,org5:Pay},
{org1:null,org2:null,org3:“人力资源”,org4:“工资单”,org5:“工资”},
{org1:null,org2:“办公室”,org3:null,org4:null,org5:“支付”},
{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
从值数组中筛选所有空值,然后循环键并分配筛选值或空值

var tempArrayList=[
{org1:null,org2:Office,org3:HR,org4:Payroll,org5:Pay},
{org1:null,org2:null,org3:“人力资源”,org4:“工资单”,org5:“工资”},
{org1:null,org2:“办公室”,org3:null,org4:null,org5:“支付”},
{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控制台包装{max height:100%!important;}
接受的答案在错误值(
{org1:false}
)上失败,变异原始对象并错误地假定
对象。键
按特定顺序返回

顺序
对象中没有任何保证。keys
以正确的顺序返回键数组:

与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顺序,不会发生变异,也不会在falsy成员值上失败:

const collapse=函数(方向、原因、主题、种子、键){
if(Array.isArray(主题)){
键=(函数(x){
常数ret=[];
while(++x0)
?钥匙
:keys.reverse();
const sortedKeys=keys.filter(
函数(键){return!reason(subject[key])}
)康卡特先生(
键过滤器(
函数(键){返回原因(主题[键]}
)
);
返回键。减少(
功能(附件、键、索引){
acc[key]=主题[sortedKeys[index]]
返回acc;
}
,种子
);
}
const collapseLeft=函数(原因、键){
返回函数(种子、主题){
返回崩溃(1,原因,主题,种子,键);
}
};
const collapseRight=函数(原因、键){
返回函数(种子、主题){
返回折叠(-1,原因,主题,种子,键);
}
};
常量临时列表=[
{org1:null,org2:Office,org3:HR,org4:Payroll,org5:Pay},
{org1:null,org2:null,org3:“人力资源”,org4:“工资单”,org5:“工资”},
{org1:null,org2:“办公室”,org3:null,org4:null,org5:“支付”},
{org1:null,org2:Office,org3:HR,org4:Payroll,org5:Pay},
{org1:head1,org2:null,org3:Pay,org4:null,org5:null}
];  
const isNull=函数(x){return x==null;};
console.log(
tempArrayList.map(
职能(项目){
//种子可以是对象({})或数组([]),请参阅其他日志
回程卡簧(
isNull,
[“org1”、“org2”、“org3”、“org4”、“org5”]
)
({},项目);
}
)
);
//正确的例子
console.log(
JSON.stringify(
衣领(
isNull,
[“org1”、“org2”、“org3”、“org4”、“org5”]
)({},{org1:“head1”,org2:null,org3:“Pay”,org4:null,org5:null})
,未定义
2.
)
);
//数组示例(种子为[])
console.log(
JSON.stringify(
collapseRight(isNull)([],[1,2,3,null,4,null,5])
,未定义
2.
)

)
所以要清楚,只要存在null,就向左移动,这样所有null都将在末尾?可能有多少个
org
s?它们总是在一个序列中(如果有
org4
那么
org3
肯定存在)?@charlietfl,是的,所有的空值都将在末尾。@ibrahimmahrir,我不知道有多少个组织,但它有序列org1,org2…看起来这些对象真的应该是数组。@Shohel抱歉,它一开始不起作用,但现在应该起作用。我已经更新了它。你可能需要重新加载页面以查看更新的答案。不起作用的兄弟,请尝试r此记录{org1:null,org2:null,org3:“HR”,org4:“Payroll”,org5:“Pay”},此代码(Object.values,const)不支持我的应用程序,你能提供纯JavaScript代码吗?哇,这看起来很复杂。我建议在那些三元组上使用普通的
if
语句。我认为问题不在于
if
的返回值,也不在于它有“block”结果,而在于它的大小写是空的。写
键是不规则的(方向>0)?键:键。反转();
,特别是在原位
反转时(顺便说一句,你是怎么用F#写的?我不知道F#但只知道其他一些MLs,我想,
keys
是一个不可变的变量,不是一个被重复覆盖的参数。@Bergi可能是带有嵌套匹配表达式的独立函数。使用类型数组匹配主题->true return[0.1,2,3…subject.length]/not键入数组返回键。T