Javascript 用第一个键值替换NaN值
我有这个东西Javascript 用第一个键值替换NaN值,javascript,json,Javascript,Json,我有这个东西 { "apple": { "0": { "2018-04-25 19:51:38": { "x": "38.0", "y": "23.0" }, "2018-04-25 19:51:39": { "x": "NaN", "y": "NaN" }, "2018-04-25 19:51:40": { "x": "NaN",
{
"apple": {
"0": {
"2018-04-25 19:51:38": {
"x": "38.0",
"y": "23.0"
},
"2018-04-25 19:51:39": {
"x": "NaN",
"y": "NaN"
},
"2018-04-25 19:51:40": {
"x": "NaN",
"y": "NaN"
}
},
"5": {
"2018-04-25 19:51:38": {
"x": "50.0",
"y": "35.0"
},
"2018-04-25 19:51:39": {
"x": "50.0",
"y": "35.0"
},
"2018-04-25 19:51:40": {
"x": "NaN",
"y": "NaN"
},
"2018-04-25 19:51:41": {
"x": "NaN",
"y": "NaN"
},
},
"6": {
"2018-04-25 19:51:34": {
"x": "30.0",
"y": "15.0"
},
"2018-04-25 19:51:39": {
"x": "NaN",
"y": "NaN"
},
}
}
}
正如您所看到的,apple键是不可排序的数字。
每个对象都有不同的长度,因此键为0
的对象有长度3,键为5
的对象有长度4,键为6
的对象有长度2。
现在,我希望键x和y的NaN值得到同一个键的第一个时间戳的值。
所以,我想要的是:
{
"apple": {
"0": {
"2018-04-25 19:51:38": {
"x": "38.0",
"y": "23.0"
},
"2018-04-25 19:51:39": {
"x": "38.0", // <-- same value of the first element
"y": "23.0" // <-- same value of the first element
},
"2018-04-25 19:51:40": {
"x": "38.0", // <-- same value of the first element
"y": "23.0" // <-- same value of the first element
}
},
"5": {
"2018-04-25 19:51:38": {
"x": "50.0",
"y": "35.0"
},
"2018-04-25 19:51:39": {
"x": "50.0",
"y": "35.0"
},
"2018-04-25 19:51:40": {
"x": "50.0", // <-- same value of the first element
"y": "35.0" // <-- same value of the first element
},
"2018-04-25 19:51:41": {
"x": "50.0", // <-- same value of the first element
"y": "35.0" // <-- same value of the first element
},
},
"6": {
"2018-04-25 19:51:34": {
"x": "30.0",
"y": "15.0"
},
"2018-04-25 19:51:39": {
"x": "30.0", // <-- same value of the first element
"y": "15.0" // <-- same value of the first element
},
}
}
}
{
“苹果”:{
"0": {
"2018-04-25 19:51:38": {
“x”:“38.0”,
“y”:“23.0”
},
"2018-04-25 19:51:39": {
“x”:“38.0”,//您可以将array#forEach
与Object.keys()一起使用
迭代对象的每个键。然后在变量中存储第一个时间戳的x
和y
值,然后迭代内部对象的每个键,并更新值为NaN
的所有键的值
let data={“苹果”:{“0”:{“2018-04-25 19:51:38”:{“x”:“38.0”,“y”:“23.0”},“2018-04-25 19:51:39”:{“x”:“NaN”,“y”:“NaN”},“2018-04-25 19:51:40”:{“x”:“NaN”,“y”:“NaN”},“5”:{“2018-04-25 19:51:38”:{“x”:“50.0”,“y”:“35.0”{“2018-04-25:19:51”:“NaN”},“y”:“y”:“NaN”},2018-04-25 19:51:41:{“x”:“NaN”,“y”:“NaN”},6:{“2018-04-25 19:51:34”:{“x”:“30.0”,“y”:“15.0”},2018-04-25 19:51:39:{“x”:“NaN”,“y”:“NaN”};
Object.keys(data.apple).forEach(k=>{
设x='NaN',y='NaN';
Object.keys(data.apple[k]).sort().forEach((k1,i)=>{
如果(i==0){
x=data.apple[k][k1].x;
y=data.apple[k][k1].y;
}否则{
if(data.apple[k][k1].x=='NaN')
data.apple[k][k1].x=x;
if(data.apple[k][k1].y=='NaN')
data.apple[k][k1].y=y;
}
});
});
console.log(数据);
Native for比foreach更快。。。。
无法改变的方式是另一个问题…必须在另一个问题中分开…然而…我试图满足你的要求。。。
whoola..没问题…请尝试adobe的代码…克隆一个对象(以可变方式)
)3.0,“y“,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2018-04-25 19:51:41:{“x”:“NaN”,“y”:“NaN”},6“:{”2018-04-25 19:51:34:{”x:“30.0”,“y:“15.0”},“2018-04-25 19:51:39:{”x:“NaN”,“y:“NaN”}}
var original_var=克隆(hola);
对于(hola.apple中的财产){
var property\u sub=属性
property_sub_keys=Object.keys(hola.apple[property_sub]);
//console.log(属性\子\键)
对于(var i=0;i使用Object.entries()
和Array\find()
在Object.values()
上获取有效对象,然后Object.assign()
更新所有NaN
let data={“苹果”:{“0”:{“2018-04-25 19:51:38”:{“x”:“38.0”,“y”:“23.0”},“2018-04-25 19:51:39”:{“x”:“NaN”,“y”:“NaN”},“2018-04-25 19:51:40”:{“x”:“NaN”,“y”:“NaN”},“5”:{“2018-04-25 19:51:38”:{“x”:“50.0”,“y”:“35.0”{“2018-04-25:19:51”:“NaN”},“y”:“y”:“NaN”},2018-04-25 19:51:41:{“x”:“NaN”,“y”:“NaN”},6:{“2018-04-25 19:51:34”:{“x”:“30.0”,“y”:“15.0”},2018-04-25 19:51:39:{“x”:“NaN”,“y”:“NaN”};
Object.entries(data.apple).forEach([k,v])=>{
const valid=Object.values(v).find({x,y})=>x!='NaN'&&y!='NaN');
Object.entries(v.filter(([[ux,{x,y}])=>x=='NaN'&&y=='NaN')
.forEach(([k,v])=>Object.assign(v,valid))
});
console.log(数据);
。作为控制台包装{最大高度:100%!重要;}
你必须循环数据并填补空白。到目前为止你尝试过的任何东西吗?0
5
和6
应该是数组吗?对象属性的顺序没有保证-你可以自己拆分这些键并对它们进行排序以绕过这个问题。在foreach之前进行排序是一个好的补充吗ion?Object.keys(data.apple).sort().forEach(…
可能必须覆盖默认排序-js可能无法处理这些字符串日期我的意思是日期键2018-04-25 19:51:40
,诸如此类-可能可以像这样正常工作+1@HassanImam谢谢,但是有可能以不变的方式这样做吗?我不会更改原始对象,我更喜欢返回一个新对象。@beth Updated解决方案。谢谢,但是可以用不可变的方式吗?我不会更改原始对象,我更喜欢返回一个新对象。谢谢,但是可以用不可变的方式吗?我不会更改原始对象,我更喜欢返回一个新对象。javascript方式不是克隆对象的更好方式…也许在服务器端是最佳选择..但是预期结果已完成..请检查!