gpt4 book ai didi

javascript - 如何在javascript中的对象中保存不同的值?

转载 作者:行者123 更新时间:2023-11-29 17:57:21 25 4
gpt4 key购买 nike

我有一堆存储在变量中的日志数据。每个日志值都包含一个摄像头名称和系统 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com