Tôi có hai mảng:Coffeescript: yếu tố mảng phù hợp với một mảng
array1 = ["hello","two","three"]
array2 = ["hello"]
tôi muốn kiểm tra xem array2 chứa 1 hoặc nhiều từ array1.
Tôi có thể làm điều đó bằng cách sử dụng Coffeescript như thế nào?
Tôi có hai mảng:Coffeescript: yếu tố mảng phù hợp với một mảng
array1 = ["hello","two","three"]
array2 = ["hello"]
tôi muốn kiểm tra xem array2 chứa 1 hoặc nhiều từ array1.
Tôi có thể làm điều đó bằng cách sử dụng Coffeescript như thế nào?
Tìm cách kiểm tra giao lộ giữa hai mảng sử dụng CoffeeScript chapter này. CoffeeScript có vẻ khá tuyệt vời khi nhìn vào điều này.
Nếu mảng kết quả sau giao điểm của các phần tử chứa ít nhất một mục thì cả hai mảng đều có phần tử chung.
intersection = (a, b) ->
[a, b] = [b, a] if a.length > b.length
value for value in a when value in b
x = ["hello", "two", "three"]
y = ["hello"]
intersection x, y // ["hello"]
Hãy dùng thử here.
Tôi đã thực hiện một chức năng is_in, nhìn vào ví dụ của tôi:
array1 = ["hello","two","three"]
array2 = ["hello"]
is_in = (array1, array2) ->
for i in array2
for j in array1
if i is j then return true
console.log is_in(array1, array2)
Sau khi xem xét các ví dụ ngã tư, tôi có thể đạt được điều này theo một cách khác:
intersection = (a, b) ->
[a, b] = [b, a] if a.length > b.length
return true for value in a when value in b
array1 = ["hello","two","three"]
array2 = ["hello"]
console.log intersection(array1, array2)
Trước đây dễ hiểu hơn nhiều - tôi sẽ tò mò nếu ai đó muốn tạo một bài kiểm tra jsPerf.com để xem liệu có bất kỳ lợi ích nào đối với mã giao lộ mà bạn đã đăng thứ hai hay không. – GregL
Bạn có thể tự tạo thử nghiệm jsPerf. Nhấp vào hai liên kết 'Thử nghiệm tại đây' và sau đó lấy mã JavaScript được biên dịch từ đó. Sau đó tạo ra một jsPerf với 2 trường hợp. – alessioalex
Bạn có thể thử:
(true for value in array1 when value in array2).length > 0
contains = (item for item in array2 when item in array1)
(đảo ngược mảng để hiển thị các mục trong đôi array1
)
Nghĩ rằng tôi sẽ ném coffeescript riêng tôi một lót điên rồ :-P
true in (val in array1 for val in array2)
Chỉ trong trường hợp ai đó đến đây và đang tìm kiếm sự khác biệt như trái ngược với giao lộ
difference = (val for val in array1 when val not in array2)
này sẽ cung cấp cho bạn một mảng (chênh lệch) của tất cả các giá trị trong array1 nhưng không phải trong array2
Hmmm, tôi khá bối rối bởi những dòng đầu tiên, và là một trong những lợi ích cốt lõi của CoffeeScript là được cho là tăng độ rõ ràng và dễ đọc của JS, phải không? Có lẽ đây là trường hợp của một số mã thông minh nhưng phức tạp, và chỉ nên được sử dụng nếu nó thực sự hiệu quả hơn mà mã rõ ràng hơn mà @alessioalex cung cấp. – GregL
@GregL - ý bạn là dòng này - 'intersection = (a, b) ->'? – Anurag
Xin lỗi, không, ý tôi là dòng # 2, là dòng đầu tiên của chức năng giao lộ. Tôi đã học được đủ cú pháp CS cho đến nay để có thể đọc dòng đầu tiên. :-) Đó là nhiều hơn mà tôi không hiểu làm thế nào mà dòng "hoạt động". – GregL