2013-08-18 7 views
12

एंगुलरजेएस का उपयोग करके, ऐरे को पुश करने के लिए पुश करें, मैं अपने ऐप में एक एडटोडो फ़ंक्शन बना रहा हूं।ऐरे में विशिष्टता के लिए जांचें, अनन्य

मुझे सरणी में जोड़े जाने वाले ऑब्जेक्ट की विशिष्टता की जांच करने के लिए एक तरीका लागू करने में समस्या हो रही है, और इसके बाद अतिरिक्त कार्रवाइयां हैं।

अब तक मैं अतिरिक्त कार्यों को काम करने में सक्षम हूं, लेकिन विशिष्टता के लिए प्रारंभिक जांच नहीं। मैं विशिष्टता कार्रवाई के लिए चेक कैसे कार्यान्वित कर सकता हूं और उसके बाद अतिरिक्त कार्रवाइयों के बाद इसे लागू कर सकता हूं?

addTodo समारोह मैं बनाने के लिए कोशिश कर रहा हूँ इस तरह बहती है (बोल्ड लागू नहीं किया मतलब है):

  1. जांच करें कि कार्य करने की सब

    1 ए में पहले से ही है । यह exisit करता है, धक्का नहीं है, प्रदर्शित चेतावनी

  2. जांच करें कि कार्य करने की खाली

    2 ए नहीं है। यदि यह रिक्त है, धक्का नहीं है, प्रदर्शित चेतावनी

  3. हैं अद्वितीय और नहीं खाली, (unqiueness जांच के बिना) सब, प्रदर्शन सफलता संदेश के लिए धक्का

वर्तमान addTodo समारोह:

$scope.addTodo = function(){ 
    $scope.isVisible = true; 
    if ($scope.todo) { 
    $scope.todos.push($scope.todo); 
    $scope.todo = ''; 
    $scope.alert = $scope.alerts[1]; 
    }else{ 
    $scope.alert = $scope.alerts[0]; 
    } 
}; 

नोट 1: $scope.alert और $scope.alerts कुछ त्रुटि संदेशों को प्रदर्शित करने के लिए उपयोग किया जाता है;

$scope.alerts[0] 

"कृपया अपने कार्य में टेक्स्ट जोड़ें।"

$scope.alerts[1] 

"एक नया कार्य जोड़ा गया!"

चेतावनी मैं अगर काम पहले से ही जोड़ा जा रहा है मौजूद प्रदर्शित करना चाहते हैं

$scope.alerts[3] 

है "टास्क सूची में पहले से।"

नोट 2: $scope.isVisible चेतावनी

+0

तो 'todo' एक सरल स्ट्रिंग या एक वस्तु है? – Chandermani

+0

यह एक साधारण स्ट्रिंग है, हाँ –

+0

आशा है कि आपने मेरा जवाब चेक कर लिया है। – Chandermani

उत्तर

18

उपयोग Array.indexOf इस तरह से:

$scope.addTodo = function(){ 
    $scope.isVisible = true; 
    if ($scope.todo) { 
    if ($scope.todos.indexOf($scope.todo) == -1) { 
     $scope.todos.push($scope.todo); 
     $scope.todo = ''; 
     $scope.alert = $scope.alerts[1]; 
    }else{ 
    // $scope.todo is already in the $scope.todos array, alert the user 
     $scope.alert = $scope.alerts[3]; 
    } 
    }else{ 
    $scope.alert = $scope.alerts[0]; 
    } 
}; 
+0

शानदार, धन्यवाद! मेरे मुख्य मुद्दों को हल नहीं किया गया है कि यह सुनिश्चित करने के लिए कि प्रवाह में कार्रवाई को लागू करने के लिए और मेरे पास पहले से जो कुछ भी था, उसके आधार पर इसे ठीक से कैसे कार्यान्वित किया जाए। –

+0

_ दूसरों के लिए नोट: _ मेफ का प्रवाह ऊपर स्थापित प्रवाह से अलग है, लेकिन वास्तव में इसे देखने का सही तरीका है: सबसे पहले, जांच करें कि टोडो खाली है या नहीं। यदि ऐसा नहीं है, तो जांचें कि यह अद्वितीय है या नहीं। नीचे दिए गए कोड में मेरा गड़बड़ था कि मैं इस विचार से बहुत जुड़ा हुआ था कि मुझे यह जांचने की ज़रूरत है कि यह पता लगाने से पहले कि क्या यह खाली था या नहीं। –

0

की दृश्यता को टॉगल करता है आप एक मानक स्ट्रिंग todo आप जावास्क्रिप्ट सरणी indexOf विधि का उपयोग कर सकते हैं प्रयोग कर रहे हैं। ऑब्जेक्ट डेटा प्रकारों के लिए यह विधि संदर्भ मिलान करता है।

अन्यथा आप jquery grep विधि भी देख सकते हैं।

यह जांचने के लिए इन विधियों में से एक का उपयोग करें कि $scope.todos में पहले से ही ऐसा तत्व है और अलर्ट दिखाएं।

+0

उस पर आधारित, मैंने इस तरह के कोड को संपादित किया है, लेकिन यह अभी भी डुप्लीकेट को सरणी पर धक्का दिया जा रहा है; '$ scope.addTodo = function() { $ scope.isVisible = true var todos = $ scope.todos; var todo = $ scope.todo; अगर (कार्य करने == todos.indexOf (TODO)) { $ scope.alert = $ scope.alerts [3]; } अन्यथा ($ scope.todo) { $ scope.todos.push ($ scope.todo); $ scope.todo = ''; $ scope.alert = $ scope.alerts [1]; } अन्य { $ scope.alert = $ scope.alerts [0]; } }; ' –

1

अगर आप underscore या lodash उपयोग कर रहे हैं, तो आप सरणी में अद्वितीय आइटम पुश करने के लिए इस सरल कोड का उपयोग कर सकते हैं।

if (_.findWhere($scope.todos, $scope.todo) == null) { 
    $scope.todos.push($scope.todo); 
} 

आशा है कि इससे मदद मिलती है !!!

संबंधित मुद्दे