作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一堆存储在变量中的日志数据。每个日志值都包含一个摄像头名称和系统 ip。我想创建一个对象,它的名称是所有不同的系统 ip,相应的值是一个数组,其中包含与该系统 ip 对应的所有摄像机名称。下面是我的代码---
$http(req).success(function(data){
$scope.logs = data;
$scope.cameras={};
var v =$scope.logs[0].systemIp;
$scope.cameras["v"]=[];
$scope.cameras["v"].push($scope.logs[0].cameraName);
for(i=1;i<$scope.logs.length;i++){
v=$scope.logs[i].systemIp;
var flag=0;
for(j in $scope.cameras){
if(j==="v")
{
flag=1;
break;
}
}
if(flag==0)
{
$scope.cameras["j"]=[];
$scope.cameras["j"].push($scope.logs[i].cameraName);
}
else if(flag==1)
{
$scope.cameras["v"].push($scope.logs[i].cameraName);
}
}});
这就是我的数据的样子 --
[{
"_id": "57683fd82c77bb5a1a49a2aa",
"cameraIp": "192.16.0.9",
"cameraName": "garage2",
"systemIp": "192.168.0.2"
},
{
"_id": "57683f8e2c77bb5a1a49a2a9",
"cameraIp": "192.16.0.8",
"cameraName": "garage1",
"systemIp": "192.168.0.2"
},
{
"_id": "57683f5e2c77bb5a1a49a2a8",
"cameraIp": "192.16.0.7",
"cameraName": "Back Door",
"systemIp": "192.168.0.4"
}]
当我在我的控制台上打印 $scope.cameras 时,它给出了这个作为输出 -
Object { v: Array[3] }
我希望相机对象看起来像这样 --
{ "192.168.0.2" : [ "garage1" , "garage2"] ,
"192.168.0.4" : [ "Back Door"] }
我是 javascript 的新手,非常感谢任何帮助。
最佳答案
如果你正在使用 Lodash 或 Underscore 库(我强烈推荐),你可以只使用 _.groupBy()
函数来完成你想要的(连同一些其他函数来确保所有值都是唯一的)。
但是,您也可以轻松地自己实现它:
function groupByDistinct(arr, prop, mapFn) {
mapFn = mapFn || function (x) { return x; };
var output = {};
arr.forEach(function (item) {
var key = item[prop],
val = mapFn(item);
if (!output[key]) {
output[key] = [val];
return;
}
if (output[key].indexOf(val) < 0) {
output[key].push(val);
}
});
return output;
}
像这样在你的代码中使用它:
$scope.cameras = groupByDistinct(data, 'cameraIp', function (logEntry) {
return logEntry.cameraName;
});
关于javascript - 如何在javascript中的对象中保存不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37933554/
我是一名优秀的程序员,十分优秀!