2013-05-13 32 views
8

Với 2 mảng javascript lồng nhau lớn, có khả năng rất lớn. Một là hiện tại và khác là lần lặp trước của mảng này. Chức năng sẽ cần phải tìm tất cả các yếu tố khác nhau và hành động theo bất cứ điều gì thay đổi.Thực hành tốt nhất cho việc tìm kiếm tất cả các yếu tố mảng lồng nhau khác nhau

Tôi biết cách thực hiện một chức năng để thực hiện việc này, tôi tự hỏi thực tiễn tốt nhất là làm gì. Bất kỳ lời khuyên tốt sẽ được đánh giá cao. Tôi đang xem xét việc sử dụng JavaScript gốc với jQuery xử lý các câu trả lời cho các phần tử khác nhau.

Câu hỏi này đề cập đến một số điều.

  1. cách hiệu quả nhất để so sánh đối tượng là gì. Trong kiểm tra javascript, thông qua nếu, nếu một đối tượng bằng hoặc không bằng một đối tượng khác, sẽ luôn luôn nói rằng nó không, ngay cả khi chúng bằng nhau. Vì vậy, các đối tượng cần phải được chia nhỏ và so sánh.

  2. Cách tốt nhất để trả lại kết quả là gì? Bạn có tạo ra một loạt các khác biệt? Trong khi đi mặc dù mảng đầu tiên để bạn rõ ràng ra các đối tượng được giống như họ đang ở đầu tiên, hoặc làm cho một mảng hoàn toàn mới để trở về?

+0

Kiểm tra cách thư viện lodash thực hiện điều đó.https: //github.com/bestiejs/lodash – lucuma

+0

Các yếu tố khác nhau, giống như theo thứ tự chúng xuất hiện khi so sánh 2? Hay chúng ta đang xem xét 2 mảng chứa tổng số, không liên quan đến thứ tự? Có lẽ bạn có thể chỉ cho chúng tôi những gì bạn đang làm và sau đó bạn có thể nhận được một số ý kiến ​​về thực hành tốt nhất. Thật không may câu hỏi này hiện đang bị hội chứng "không phải là một câu hỏi thực sự". – Xotic750

+0

Bản sao của ["Cách nhanh nhất hoặc thanh lịch nhất để tính toán sự khác biệt được đặt bằng cách sử dụng các mảng Javascript là gì?"] (Http://stackoverflow.com/questions/1723168/what-is-the-fastest-or-most-elegant -way-to-compute-a-set-sự khác biệt-sử dụng-javasc) và của ["sự khác biệt mảng JavaScript"] (http://stackoverflow.com/questions/1187518/javascript-array-difference). –

Trả lời

1
function CompareArrays(arr1, arr2){  
    for(var key in arr1){ 
     if(arr1[key] !== arr2[key]){ 
      // traverse into nested array 
      if(typeof(arr1[key]) == 'object' || typeof(arr2[key]) == 'object'){     
       CompareArrays(arr1[key], arr2[key]); 
      } 
     }else{ 
       delete arr2[key]; 
     } 
    } 
} 

var a1 = [1,2,3,["a","b","c"],4,5,6,["d","e","f"]]; 
var a2 = [1,2,5445,["a","tt","c"],4,5,336,["d","edee","ffdf"], 'blablabla', 'I\'m extra']; 

CompareArrays(a1, a2); 
console.log(a2); 

này sẽ xem xét thứ hai nhất định. Và sửa đổi nó loại bỏ bất kỳ giá trị bằng nhau được chia sẻ. Mảng vẫn sẽ còn nguyên vẹn nhưng bất kỳ giá trị nào giống nhau đều không được xác định.

0

Cá nhân tôi nghĩ đệ quy là một thực tiễn tốt cho tình huống này.

console.clear(); 
// Compare 2 nested arrays, do something if values don't match 
function CompareArrays(arr1, arr2){ 

    for(var i=0;i<arr1.length;i++){ 
     if(typeof arr1[i] === "object"){ 
      // traverse into nested array 
      CompareArrays(arr1[i], arr2[i]); 
     }else{ 
      if (arr1[i] != arr2[i]){ 
       // do something! 
       console.log("mismatch @ "+ i +" a1: "+arr1[i]+" a2: "+ arr2[i]); 
      } 
     } 
    } 
} 

var a1 = [1,2,3,["a","b","c"],4,5,6,["d","e","f"]]; 
var a2 = [1,2,55,["a","tt","c"],4,5,6,["d","e","f"]]; 

CompareArrays(a1, a2); 

fiddle làm việc: http://jsfiddle.net/ymSmP/5

+0

Điều này giả định rằng tất cả các khóa trong a1 sẽ ở a2. Và a2 sẽ không có các phím khác nhau. – Iscariot

+0

có tất nhiên. Bạn đã không nói rằng các mảng sẽ có kích thước khác nhau quá. – carrabino

Các vấn đề liên quan