जावास्क्रिप्ट ऑब्जेक्ट पुश () फ़ंक्शन


101

मेरे पास एक जावास्क्रिप्ट ऑब्जेक्ट है (मुझे वास्तव में एजाक्स अनुरोध के माध्यम से डेटा मिलता है):

var data = {};

मैंने इसमें कुछ चीजें जोड़ी हैं:

data[0] = { "ID": "1"; "Status": "Valid" }
data[1] = { "ID": "2"; "Status": "Invalid" }

अब मैं सभी वस्तुओं को अमान्य स्थिति से हटाना चाहता हूं (लेकिन सब कुछ क्रमबद्ध रखें):

var tempData = {};
for ( var index in data ) {
    if ( data[index].Status == "Valid" ) {
        tempData.push( data );
    }
}
data = tempData;

मेरे दिमाग में, यह सब काम करना चाहिए, लेकिन मुझे एक त्रुटि मिल रही है जो tempData.pushएक फ़ंक्शन नहीं है। मैं समझता हूं कि यह एक सरणी के समान क्यों नहीं है, लेकिन मैं अन्यथा क्या कर सकता था?


4
ऐसा लगता है कि आपको बस एक सरणी का उपयोग करना चाहिए
Esailija

जवाबों:


132

push()सरणियों के लिए है , वस्तुओं के लिए नहीं , इसलिए सही डेटा संरचना का उपयोग करें।

var data = [];
// ...
data[0] = { "ID": "1", "Status": "Valid" };
data[1] = { "ID": "2", "Status": "Invalid" };
// ...
var tempData = [];
for ( var index=0; index<data.length; index++ ) {
    if ( data[index].Status == "Valid" ) {
        tempData.push( data );
    }
}
data = tempData;

9
+1 ने मुझे हरा दिया। for...inलूप बदलने के लिए मत भूलना , भी।
एंडी ई

@MattBall मेरा बुरा! मैं वास्तव में एसओ समीक्षा और सामान पर निपुण नहीं हूं! :)
शौविक

1
धक्का सरणी के लिए है, क्या किसी वस्तु में एक सरणी जोड़ने का कोई तरीका है?
वेंकट

1
साहचर्य सरणी के बारे में क्या?
कीनार्ड होकेनहुल

@KinnardHockenhull मुझे खेद है, मैं इस सवाल को नहीं समझता। क्या आप स्पष्ट कर सकते हैं कि आप क्या पूछ रहे हैं?
मैट बॉल

17

ऑब्जेक्ट पुश संपत्ति का समर्थन नहीं करते हैं, लेकिन आप इसे कुंजी के रूप में सूचकांक का उपयोग करके भी बचा सकते हैं,

var tempData = {};
for ( var index in data ) {
  if ( data[index].Status == "Valid" ) { 
    tempData[index] = data; 
  } 
 }
data = tempData;

मुझे लगता है कि यदि वस्तु की स्थिति अमान्य है, तो उसे हटाकर यह आसान है।

for(var index in data){
  if(data[index].Status == "Invalid"){ 
    delete data[index]; 
  } 
}

और अंत में आपको एक var अस्थायी बनाने की आवश्यकता नहीं है -


जवाब के साथ कुछ स्पष्टीकरण जोड़ें कि यह उत्तर वर्तमान समस्या को ठीक करने में ओपी की मदद कैसे करता है
ρяєρ withя K

5

आपको बनाना ही चाहिए var tempData = new Array();

पुश एक ऐरे फ़ंक्शन है।


9
क्यों new Array()और क्या नहीं []?
मैट बॉल

3
[] नई सरणी बनाने के लिए एक विकल्प (शॉर्टकट) है। इसे [] और नए ऐरे () के साथ बनाया जा सकता है।
एलेक्स डायन

6
[]सरणियों के निर्माण का प्राथमिक तरीका है, अन्य विकल्प हैं और इन्हें अधिलेखित भी किया जा सकता है।
एसेलीजा

6
देखें stackoverflow.com/questions/885156/... क्यों की चर्चा के लिए new Array()बुराई है
जोनास hogh

w3schools.com/js/js_obj_array.asp नया ऐरे नियमित सरणी है। जहां [] प्राथमिक के रूप में परिभाषित किया गया है?
एलेक्स डायन

3

जावास्क्रिप्ट प्रोग्रामिंग भाषा कार्यात्मक प्रोग्रामिंग प्रतिमान का समर्थन करती है ताकि आप इन कोडों के साथ आसानी से कर सकें।

var data = [
    {"Id": "1", "Status": "Valid"},
    {"Id": "2", "Status": "Invalid"}
];
var isValid = function(data){
    return data.Status === "Valid";
};
var valids = data.filter(isValid);

2

मुझे लगता है कि वास्तव में आप सर्वर से ऑब्जेक्ट प्राप्त करते हैं और आउटपुट पर ऑब्जेक्ट प्राप्त करना चाहते हैं

Object.keys(data).map(k=> data[k].Status=='Invalid' && delete data[k])


0
    tempData.push( data[index] );

मैं ऊपर दिए गए सही उत्तर से सहमत हूं, लेकिन .... आपका अभी भी उस डेटा के लिए इंडेक्स वैल्यू नहीं दे रहा है, जिसे आप tempData में जोड़ना चाहते हैं। [इंडेक्स] मूल्य के बिना पूरे ऐरे को जोड़ा जाएगा।


कृपया वर्णन करें कि समस्या को कैसे हल किया जाए। धन्यवाद।
लियोनिद ग्लान्ज़

यह मैट बॉल से स्वीकृत उत्तर को सही करने के लिए होगा। जैसा कि हम डेटा के माध्यम से लूप कर रहे हैं, हमें केवल डेटा [इंडेक्स] को पुश करना चाहिए, डेटा को पूरी तरह से नहीं।
जोनाथन बर्जरॉन

-2

करना :


var data = new Array();
var tempData = new Array();


4
क्यों new Array()और क्या नहीं []?
मैट बॉल

नए एरे () के बीच अंतर पर ध्यान दें; और नया ऐरे; आपको विकल्पों के बारे में बताने के बजाय ऐसे सवालों का जवाब देने में सक्षम होना चाहिए ..
जोनाथन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.