如何查找具有指定名称的属性并使用新属性附加所有者对象?
我有这样的数据结构:
var factoryOptions = {
background: {
src: 'images/background.png',
width: 4800,
height: 3200
},
player: {
sprite: {
src: 'images/tanks/superTank.ss.png',
frameTime: 10,
frameCount: 3
},
width: 54,
height: 32
},
tanks: {
light: {
sprite: {
src: 'images/tanks/lightTank.png',
frameTime: 100,
frameCount: 1
},
width: 32,
height: 32
},
medium: {
sprite: {
src: 'images/tanks/mediumTank.png',
frameTime: 10,
frameCount: 1
},
width: 46,
height: 46
},
heavy: {
sprite: {
src: 'images/tanks/heavyTank.png',
frameTime: 10,
frameCount: 1
},
width: 64,
height: 64
}
}
}
}
我想找到所有属性“src”并通过使用此src添加图像来修改所有者对象,因此最终结果应如下所示:
var factoryOptions = {
background: {
src: 'images/background.png',
width: 4800,
height: 3200,
image: new Image()
},
player: {
sprite: {
src: 'images/tanks/superTank.ss.png',
frameTime: 10,
frameCount: 3,
image: new Image()
},
width: 54,
height: 32
},
tanks: {
light: {
sprite: {
src: 'images/tanks/lightTank.png',
frameTime: 100,
frameCount: 1,
image: new Image()
},
width: 32,
height: 32
},
medium: {
sprite: {
src: 'images/tanks/mediumTank.png',
frameTime: 10,
frameCount: 1,
image: new Image()
},
width: 46,
height: 46
},
heavy: {
sprite: {
src: 'images/tanks/heavyTank.png',
image: new Image(),
frameTime: 10,
frameCount: 1
},
width: 64,
height: 64
}
}
}
}
答案 0 :(得分:2)
function deepSrc(obj){
for (var i in obj){
if (i == 'src'){
obj.image = new Image();
}
else if (typeof obj[i] == 'object'){
deepSrc(obj[i]);
}
}
}
deepSrc(factoryOptions);
答案 1 :(得分:-1)
这可以解决问题:
function addImg(obj) {
if (obj.hasOwnProperty("src")) {
obj.image = new Image();
}
for (prop in obj) {
if (typeof obj[prop] === "object") {
addImg(obj[prop]);
}
}
}