使用 map 函数格式化数据 + 在数组中获取数组但不想要



我正在尝试使用映射以某种方式fot我的数据。

我想要的('值'是对象的数组):

[{name:"testmodel",values[{val1:"val1",...,val5:"val5"}]},
{name:"testmodel2",values[{val1:"val1",...,val5:"val5"}]},
...
{name:"testmodelN",values[{val1:"val1",...,val5:"val5"}]}
]

我得到的('values'是侧面的一个对象数组):

[{name:"testmodel",values[[{val1:"val1",...,val5:"val5"}]]},
{name:"testmodel2",values[[{val1:"val1",...,val5:"val5"}]]},
...
{name:"testmodelN",values[[{val1:"val1",...,val5:"val5"}]]}
]

这是我的数据

data_p = [
    [   {"key":"Device_Model","value":"test_model"},
        {"key":">20MB/30","value":"11"},
        {"key":">200MB/30","value":"33"},
        {"key":">2048MB/30","value":"10"},
        {"key":">5120MB/30","value":"55"},
        {"key":">10240MB/30","value":"10"}
    ],
    [{"key":"Device_Model","value":"0P6B670"},{"key":">20MB/30","value":"9"},{"key":">200MB/30","value":"8"},{"key":">2048MB/30","value":"2"},{"key":">5120MB/30","value":"23"},{"key":">10240MB/30","value":"23"}],
    [{"key":"Device_Model","value":"0P6B680"},{"key":">20MB/30","value":"1"},{"key":">200MB/30","value":"23"},{"key":">2048MB/30","value":"23"},{"key":">5120MB/30","value":"23"},{"key":">10240MB/30","value":"23"}],
    [{"key":"Device_Model","value":"0P6B810"},{"key":">20MB/30","value":"5"},{"key":">200MB/30","value":"4"},{"key":">2048MB/30","value":"1"},{"key":">5120MB/30","value":"1"},{"key":">10240MB/30","value":"1"}],
    [{"key":"Device_Model","value":"0P6B900"},{"key":">20MB/30","value":"4"},{"key":">200MB/30","value":"4"},{"key":">2048MB/30","value":"1"},{"key":">5120MB/30","value":"23"},{"key":">10240MB/30","value":"23"}]]

thsi是我的地图功能:

var bar = color.domain().map(function(name){            
    return {            
      name: name,           
      values: data_p.map(function(d){
        a=[]
        a.push(d[1])
        a.push(d[2])
        a.push(d[3])
        a.push(d[4])
        a.push(d[5])
      return a;                     
      })
    }       
})

上述无法使用,因为color库在这里不可用,但这应该给您我得到的

data_p.map(function(d){
        a=[]
        a.push(d[1])
        a.push(d[2])
        a.push(d[3])
        a.push(d[4])
        a.push(d[5])
      return a;                     
      })

这就是我得到的:

    bar
    [Object { name="test_model",  values=[5]}, Object { name="0P6B670",  values=[5]}, Object { name="0P6B680",  values=[5]}, Object { name="0P6B810",  values=[5]}, Object { name="0P6B900",  values=[5]}]
    bar[0]["values"]
    [[Object { key=">20MB/30",  value="11"}, Object { key=">200MB/30",  value="33"}, Object { key=">2048MB/30",  value="10"}, Object { key=">5120MB/30",  value="55"}, Object { key=">10240MB/30",  value="10"}]],...
    bar[0]["values"][0]
    [Object { key=">20MB/30",  value="11"}, Object { key=">200MB/30",  value="33"}, Object { key=">2048MB/30",  value="10"}, Object { key=">5120MB/30",  value="55"}, Object { key=">10240MB/30",  value="10"}]

上方我非常接近,但是在bar[0]["values"]侧面,我在值数组中有一系列对象。我想要的是 values是一系列对象。

这是我想要的:(请注意,此values是对象的数组)

bar[0]["values"]
[Object { key=">20MB/30",  value="11"}, Object { key=">200MB/30",  value="33"}, Object { key=">2048MB/30",  value="10"}, Object { key=">5120MB/30",  value="55"}, Object { key=">10240MB/30",  value="10"}]

edit1

这就是我想要的

[{name:"testmodel",values[{ key=">20MB/30",  value="11"}, { key=">200MB/30",  value="33"}, { key=">2048MB/30",  value="10"}, { key=">5120MB/30",  value="55"}, { key=">10240MB/30",  value="10"}]},
{name:"testmodel2",values[{ key=">20MB/30",  value="11"}, { key=">200MB/30",  value="33"}, { key=">2048MB/30",  value="10"}, { key=">5120MB/30",  value="55"}, { key=">10240MB/30",  value="10"}]},
...
{name:"testmodelN",values[[{val1:"val1",...,val5:"val5"}]]}
]

当我使用您说的内容时,每个名称的25个密钥/值。我要每个名称需要5个键/阀。

   [{name:"testmodel",values[{val1:"val1",...,val25:"val25"}]},
    {name:"testmodel2",values[{val1:"val1",...,val25:"val25"}]},
    ...
    {name:"testmodelN",values[{val1:"val1",...,val25:"val25"}]}
    ]

edit2

tks to @trincot回答下面,将其分解为我的参考。在控制台中进行了以下操作。

//1 
aa=data_p.filter(function(d){
        return d[0].value == "test_model";
      })
aa
//2
aa=data_p.filter(function(d){
        return d[0].value == "test_model";
      })[0]
aa
//3
aa=data_p.filter(function(d){
        return d[0].value == "test_model";
      })[0].slice(1)
aa

您需要通过在外回调函数中传递的名称过滤数据。您可以使用filter(或具有find的现代浏览器)来完成。在过滤的项目上,您可以使用 slice取元素,以便排除包含名称的第一个元素:

var bar = color.domain().map(function(name){            
    return {            
      name: name,     
      values: data_p.filter(function(d){
        return d[0].value == name;
      })[0].slice(1)
    }
})

最新更新