2015-04-17 39 views
-2

我在试图做的是获得存储在数组中的唯一值,如果一个元素被推送到具有相同的MAC和IP的JSON字符串我想使它取代现有的记录与新的它可以取代它全部或只是信号,距离和频率我没有一个坚实的代码段我目前只是试图获得我需要的东西。贝娄是从我的JavaScript控制台的铬输出JSON输出的例子我知道它没有格式化最好,但它是有效的。做一个推动和更新在javascript阵列

{"prey":["{\"distance\": 8.686924173343307, \"signal\": \"-59\", \"frequency\": 2447, \"mac\": \"00:00:00:00:00:00\", \"ip\": \"192.168.43.27\"}"]} 

我曾尝试做多远使用for循环重复检查的JavaScript是返回数组的长度错误由于某种原因,这并不工作,它只是卡住了,因为我一个无限循环不断增加值给数组,并且它不以它应该的独特方式工作。

这是我目前拥有的代码,因为我只是不断尝试一切,我可以认为这不能以任何方式工作我一直在试图获得独特的数组,但它只是不工作这个输出和实际输出一样,它没有得到唯一的数组。我从一个堆栈溢出问题

function arrayLastUnique(array) { 
    return array.filter(function (a, b, c) { 
     // keeps last occurrence 
     return c.indexOf(a, b + 1) < 0; 
    }); 
} 

jsonSpy['prey'].push(msg); 
$('#lines').append($('<p>').text(msg)); 
console.log(arrayLastUnique(jsonSpy.prey)); 
spyList = JSON.stringify(jsonSpy); 
drawPositions(ctx, spyList); 
+3

您的JSON无效。它应该像'{“猎物”:[{}]}''而不是'{“猎物”:[“{}”]}' – Satpal

+0

是的,我把它粘上去了,我现在修复它 – bobthemac

+0

它是从我的谷歌铬调试控制台 – bobthemac

回答

0
var yourJSON = {"prey": 
    [ 
     { "distance": 8.686924173343307, 
      "signal": "-59", 
      "frequency": 2447, 
      "mac": "00:00:00:00:00:00", 
      "ip": "192.168.43.27" 
     } 
    ] 
}; 

var newDistance = 8.69; 

if (yourJSON["prey"][0]["mac"] && yourJSON["prey"][0]["ip"]) { 
    yourJSON["prey"][0]["distance"] = newDistance; 
} 

得到了独特的功能,如果存在“MAC”和“IP”的值,即它们不是一个空字符串,false,0,nullundefined,条件满意。在条件块中,您可以分配一个新值。这只是一个非常简单的例子。你必须根据你的需要调整它并扩展它。