Ich versuche, alle Schlüssel und Werte eines Objekts abzurufen, die mit imageIds beginnen.

Mein Objekt sieht wie folgt aus:

{
    title: 'fsdfsd',
    titleZh: 'fsdfsd',
    body: 'fsdf',
    bodyZh: 'sdfsdf',
    imageIds: '/uploads/tmp/image-3.png',
    imageIdsZh: '' 
}

Ich brauche aber nur die Eigenschaften imageIds und imageIdsZh. Morgen könnte ein Objekt jedoch imageIdsBlah enthalten, und ich müsste es ebenfalls abholen. Ich könnte die ersten Eigenschaften aus dem Objekt entfernen, aber dann könnte das nächste Objekt zusätzliche Eigenschaften wie foo: 'bar' enthalten.

14
Neil 10 Dez. 2013 im 07:06

3 Antworten

In Anlehnung an die Antwort von @zerkms habe ich an einem funktionale Programmierbibliothek für Javascript. Mit den Werkzeugen aus dieser Bibliothek wird dies zu einem (etwas dichten) Einzeiler:

var data = {
    title: 'fsdfsd',
    titleZh: 'fsdfsd',
    body: 'fsdf',
    bodyZh: 'sdfsdf',
    imageIds: '/uploads/tmp/image-3.png',
    imageIdsZh: '' 
};

var x = pick(filter(compose(eq("imageIds"), substring(0,8)), keys(data)), data);
console.log(x);

Dieser Code ist nicht unbedingt besser als der von @zerkms veröffentlichte Code, zeigt jedoch einige mehr von der Kraft funktionaler Abstraktionen als die wenigen, die in Array.prototype eingebaut sind.

Sie können es in JSFiddle in Aktion sehen .

1
Community 23 Mai 2017 im 11:46

Je nachdem, wie groß das Objekt ist, ist dies möglicherweise nicht gut skalierbar, funktioniert jedoch

for(key in obj){
   if(obj.hasOwnProperty(key)){
      if(key.indexOf("imageIds")===0){
        //do something
      }
   }
}
2
scrblnrd3 10 Dez. 2013 im 03:10
 // json to be searched
var data = {
    title: 'fsdfsd',
    titleZh: 'fsdfsd',
    body: 'fsdf',
    bodyZh: 'sdfsdf',
    imageIds: '/uploads/tmp/image-3.png',
    imageIdsZh: '' 
};


// takes the json 'data' as its 1st parameter
// and the desired 'property' to be searched as the 2nd parameter
// for loop iterates through the entire json
// if the property parameter matches a 'key' name in json e.g. 'imageIds'
// then the value for that property is returned
function fetchProperty (data, property) {
    for(var key in data) {
        if(key === property) {
            return data[key];
        }   
    }
}


// if you wanted to return a bunch of data according to a particular key - value pair
// you could do something like this...
// assume 'array' contains a bunch of jsons 
// newData will hold jsons containing your newly fetched data points
function fetchNewData() {
   var newData = [];
   for(var i = 0; i < array.length; i++) {

      var value1 = fetchProperty(array[i], 'imageIds');
      var value2 = fetchProperty(array[i], 'imageIdsZh');
      var value3 = fetchProperty(array[i], 'imageIdsBlah');

      var tempJSON = {};
      tempJSON.imageIds = value1;
      tempJSON.imageIdsZh = value2;
      tempJSON.imageIdsBlah = value3;

      newData.push(tempJSON);
   }
   return newData;
}    

** Ich hoffe das war hilfreich. Wenn Sie weitere Fragen haben, können Sie sich gerne an uns wenden. Viel Glück. ** **.

0
user548 10 Dez. 2013 im 04:00