从Json数组中获取属性并将它们添加到js对象

时间:2017-10-02 21:34:06

标签: arrays json object three.js

您好我正在尝试使用threejs制作cms,并且我想将json属性添加到threejs的网格中。我可以使用以下命令检索json属性:

console.log(Articles.results[i].id);

但我希望例如有mesh.id等。

我的json输出是:

{id: 6, title: "ytc zjzx", summary: "zxv xzcv xcvzx", content: "zxvxcbvcx bcvbdf", publicationDate: 1506632400}
length
:
2
__proto__
:
Array(0)
totalRows
:
2
__proto__
:
Object

我的代码到现在为止:

function addGeometry() {
    var geometry = new THREE.BoxBufferGeometry(25, 25, 25);
    var material = new THREE.MeshBasicMaterial({color:0x00ff44});


for(var i = 0; i < Articles.results.length; i += 1){

console.log(Articles);

mesh = new THREE.Mesh( geometry, material );

    mesh.position.y =Math.random() * ((HEIGHT-10) - (HEIGHT+10));
    mesh.position.x =Math.random() * ((HEIGHT-10) - (HEIGHT+10));


     mesh.updateMatrix();
     mesh.matrixAutoUpdate = false;
     scene.add( mesh );

}

1 个答案:

答案 0 :(得分:1)

您可以使用Object.keys()获取对象的属性。然后使用bracket notation将该属性分配给您的网格:

// Assuming this is your object
var obj = Articles.results[i];    

var keyNames = Object.keys(obj);

keyNames.forEach(v => {
    // v is the name of the property (e.g. "id", "title")
    mesh[v] = obj[v]
});

然后将它们分配给网格,您应该可以在以后访问它们。 使用这种方法的好处是它非常灵活。即使你的JSON发生了变化,它也会一直运行。

这是一个有效的Pen

请注意,Object3D已包含id属性,因此您将覆盖该属性。首先检查一下你在JSON中的内容。

另一种选择是将对象附加到网格并在那里分配值。类似的东西:

mesh.info[v] = obj[v];

然后您可以像mesh.info.id一样访问它,而不会丢失以前的值。