Javascript 从JSON对象创建数组

Javascript 从JSON对象创建数组,javascript,arrays,json,object,Javascript,Arrays,Json,Object,下面是我的JSON对象 var validation_messages ={ "test1": [{ "1": { "rssi": -25, } }, { "2": { "rssi": -25, } }], "test2": [{ "15": { "rssi": -10, } }, { "19": { "rssi": -21, }

下面是我的JSON对象

var validation_messages ={
"test1": [{
    "1": {

        "rssi": -25,

    }
}, {
    "2": {

        "rssi": -25,

    }
}],
"test2": [{
    "15": {

        "rssi": -10,
                }
}, {
    "19": {

        "rssi": -21,

    }
}]
}

下面是我尝试过的

var rssival=[]; 对于(验证消息中的var键){

但我需要一个输出作为

[-25, -25, -10, -21]
[[-25, -25], [-10, -21]]

有人能帮我吗?

您可以将所有属性分组

var-validation\u messages=validation\u messages={“00:11:74:41:3d:f0”:[{“1”:{channel:1,type:2,rssi:-25,rate:24}},{“2”:{channel:1,type:2,rssi:-25,rate:24}],“00:23:68:bd:6c:19”:[{“15”:{channel channel 1,type:0,rssi:-10,rate:1},{“19”:{channel 1,type:2,rssi:-21,rate:54},
分组=对象.keys(验证消息).map(函数(k){
返回验证消息[k].reduce(函数(r,o){
对象。键(o)。forEach(函数(l){
r、 推(o[l].rssi);
});
返回r;
}, []);
});

console.log(分组);
您可以尝试以下方法:

var-validation_messages={“00:11:74:41:3d:f0”:[{1:{channel:1,type:2,rssi:-25,rate:24}}},{2:{channel:1,type:2,rssi:-25,rate:24}],“00:23:68:bd:6c:19:[{15:{channel 1,type:0,rssi:-10,rate:1},{19:{channel 1,type:2,rssi:-21,rate:54}};
var result=Object.keys(验证消息).map(函数(k){
var tmp=[];
验证消息[k].forEach(函数(o){
for(变量k in o){
tmp.push(o[k].rssi)
}
})
返回tmp
});

console.log(result)
这不是您需要的吗

var-validation_messages={“00:11:74:41:3d:f0”:[{1:{channel:1,type:2,rssi:-25,rate:24}}},{2:{channel:1,type:2,rssi:-25,rate:24}],“00:23:68:bd:6c:19:[{15:{channel 1,type:0,rssi:-10,rate:1},{19:{channel 1,type:2,rssi:-21,rate:54}};
var rssival=[];
for(验证消息中的var键){
var obj=验证消息[键];
var aux=[];
对于(变量i=0;i
另一种方法

var obj={“00:11:74:41:3d:f0”:[{1:{channel:1,type:2,rssi:-25,rate:24}}},{2:{channel:1,type:2,rssi:-25,rate:24}],“00:23:68:bd:6c:19:[{15:{channel 1,type:0,rssi:-10,rate:1},{19:{channel 1,type:2,rssi:-21,rate:54}],
结果=Object.keys(obj).map(函数(v){
var-arr=[];
obj[v].forEach(c=>arr.push(c[Object.keys(c)].rssi));
返回arr;
});

console.log(result);
请注意编辑器中的
图标。您可以将代码(JS/CSS/HTML)放入并使其可执行。我刚刚格式化了输入,以便重点放在您的逻辑上。如果不需要,您可以将其还原,我认为您已经过度复杂了。对于这种情况,两个循环就足够了。(:@Kinduser第三个循环对于用户有多个项的情况是必需的。这是一个完整的动态方法。我花了一些时间来弄清楚它是如何工作的,但如果您有多个键,这将不起作用。尽管对于这种情况,这种方法很聪明。:-)@Rajesh谢谢你指出这一点。你能提供一些反例吗,当我的代码不能正常工作时?尝试在
“00:11:74:41:3d:f0”中添加
{3:{channel:1,type:2,rssi:-30,rate:24}}
再试一次。@Rajesh我已经按照你说的那样添加了它,但我只是认为它可以工作……我错了吗?我的道歉。待命时键入的内容不正确。请检查
[[-25, -25], [-10, -21]]