我有一个json的对象集合
{
"images":{
"1":{
"image_data":{
"votable":true,
"hashed_filename":"d66f00cf58c4fbbbc9703efff9c7694c"
},
"image_reference":1
},
"2":{
"image_data":{
"votable":true,
"hashed_filename":"5485a21d47e3815cd7f23d5f8a8c8677"
},
"image_reference":2
},
"3":{
"image_data":{
"votable":true,
"hashed_filename":"4df10b887f12d65f2f541c99f0dd1ef8"
},
"image_reference":3
}
}
}
是否有一种简单的方法可以在由下划线分隔的字符串中提取hashed_filename值?
我需要像d66f00cf58c4fbbbc9703efff9c7694c_5485a21d47e3815cd7f23d5f8a8c8677_4df10b887f12d65f2f541c99f0dd1ef8
答案 0 :(得分:6)
是。从对象获取所有值作为数组,从数组中的每个对象获取image_data.hashed_filename
,然后将所有值与_
连接。
Object.values(obj.images).map(x => x.image_data.hashed_filename).join('_')
但是在评估Object.values(obj.images)
时,由于对象在JS中是无序的,因此无法保证值的顺序。
要按键排序,请从对象获取密钥,对密钥进行排序,获取每个密钥的值。然后映射image_data.hashed_filename
并加入(与之前相同)。
Object.keys(obj.images).sort().map(x => obj.images[x])
.map(x => x.image_data.hashed_filename).join('_')
答案 1 :(得分:0)
是的,这是可能的。你可以这样做:
var o = {
"images":{
"1":{
"image_data":{
"votable":true,
"hashed_filename":"d66f00cf58c4fbbbc9703efff9c7694c"
},
"image_reference":1
},
"2":{
"image_data":{
"votable":true,
"hashed_filename":"5485a21d47e3815cd7f23d5f8a8c8677"
},
"image_reference":2
},
"3":{
"image_data":{
"votable":true,
"hashed_filename":"4df10b887f12d65f2f541c99f0dd1ef8"
},
"image_reference":3
}
}
};
var result = Object.keys(o.images).reduce((acc, key) => {
acc += (acc ? "_" : "") + o.images[key].image_data.hashed_filename;
return acc;
},"")
console.log(result);
在此,您可以了解有关Object.keys和Array.reduce
的更多信息答案 2 :(得分:0)
localhost:8080