2016-04-28 10 views
0

Es scheint, dass die Leute verwirrt sind mit dem, was ich erreichen möchte, also werde ich das besser erklären. Ich habe eine originelle Reihe von Produkten. Ein einzelnes Produkt sieht wie folgt aus:Verwenden von Karte, um die Reihenfolge eines Arrays zu ändern

{ 
    "id": 1, 
    "gtin": "8714574627946|4549292038446", 
    "productId": "0592C022", 
    "make": "Canon", 
    "model": "750D + EF-S 18-55mm", 
    "expert": false, 
    "sponsored": false, 
    "attributes": { 
     "id": 1, 
     "compatibleMemory": "SD, SDHC, SDXC\"", 
     "whiteBalance": "ATW, Cloudy, Custom modes, Daylight, Flash, Fluorescent L, Shade, Tungsten\"", 
     "sceneModes": "Food, Landscape, Sports\"", 
     "shootingModes": "", 
     "photoEffects": "", 
     "cameraPlayback": "Movie, Single image, Slide show\"", 
     "tripod": false, 
     "directPrinting": false, 
     "colour": "Black", 
     "picture": { 
      "id": 1, 
      "megapixel": "24.2 MP", 
      "type": "SLR Camera Kit", 
      "sensorType": "CMOS", 
      "maxResolution": "6000 x 4000 pixels", 
      "resolutions": "3984x2656, 2976x1984, 1920x1280, 720x480, 5328x4000, 3552x2664, 2656x1992, 1696x1280, 640x480, 6000x3368, 3984x2240, 2976x1680, 1920x1080, 720x480, 4000x4000, 2656x2656, 1984x1984, 1280x1280, 480x480\"", 
      "stablizer": true, 
      "location": "Lens", 
      "supportedAspectRatios": "2.9 cm", 
      "totalMegapixels": "24.7 MP", 
      "formats": "JPG" 
     }, 
     "video": { 
      "id": 1, 
      "maxResolution": "1920 x 1080 pixels", 
      "resolutions": "640 x 480, 1280 x 720, 1920 x 1080 pixels\"", 
      "captureResolution": "", 
      "frameRate": "", 
      "fullHD": true, 
      "supportedFormats": null 
     }, 
     "audio": { 
      "id": 1, 
      "supportedFormats": "" 
     }, 
     "battery": { 
      "id": 1, 
      "powerSource": "Battery", 
      "technology": "Lithium-Ion (Li-Ion)", 
      "life": "", 
      "type": "LP-E17" 
     }, 
     "dimensions": { 
      "id": 1, 
      "width": "", 
      "depth": "7.78 cm", 
      "height": "10.1 cm", 
      "weight": "", 
      "weightIncludingBattery": "555 g" 
     }, 
     "display": { 
      "id": 1, 
      "type": "LCD", 
      "diagonal": "7.62 cm (3\"\")\"", 
      "resolution": "1040000 pixels" 
     }, 
     "exposure": { 
      "id": 1, 
      "isoSensitivity": "100, 6400, 12800, Auto\"", 
      "mode": "Auto, Manual\"", 
      "correction": "�5EV (1/2; 1/3 EV step)", 
      "metering": "Centre-weighted, Evaluative (Multi-pattern), Partial, Spot\"", 
      "minimum": 100, 
      "maxiumum": 12800 
     }, 
     "flash": { 
      "id": 1, 
      "modes": "Hi-speed sync, Red-eye reduction\"", 
      "exposureLock": true, 
      "rangeWide": "", 
      "rangeTelephoto": "", 
      "rechargeTime": "", 
      "speed": "1/200" 
     }, 
     "focusing": { 
      "id": 1, 
      "focus": "TTL-CT-SIR", 
      "adjustment": "", 
      "autoFocusModes": "", 
      "closestDistance": "0.25 m", 
      "normalRange": "", 
      "macroRangeTelephoto": "", 
      "macroRangeWide": "", 
      "autoModeTelephoto": "", 
      "autoModeWide": "" 
     }, 
     "interface": { 
      "id": 1, 
      "pictBridge": true, 
      "usbVersion": "2.0", 
      "usbType": "", 
      "hdmi": true, 
      "hdmiType": "Mini" 
     }, 
     "lens": { 
      "id": 1, 
      "focalLength": "18 - 55 mm", 
      "minimumFocalLength": "2.9 cm", 
      "maximumFocalLength": "8.8 cm", 
      "minimumAperture": "3.5", 
      "maximumAperture": "38", 
      "lensStructure": "13/11", 
      "zoom": { 
       "id": 1, 
       "optical": "", 
       "digital": "", 
       "extraSmart": "", 
       "combined": "" 
      } 
     }, 
     "network": { 
      "id": 1, 
      "wiFi": false, 
      "wiFiStandards": "", 
      "nfc": false 
     }, 
     "shutter": { 
      "id": 1, 
      "fastestSpeed": "1/4000 s", 
      "slowestSpeed": "30 s" 
     } 
    }, 
    "details": { 
     "id": 1, 
     "title": "Canon EOS 750D + EF-S 18-55mm", 
     "description": "\"<b>Take your pictures to the next level with EOS 750D</b>\\n- Effortlessly take your pictures to the next level with the latest DSLR technology and Scene Intelligent Auto mode.\\n- Effortlessly capture stunning detail in any situation\\n- Record cinematic movies as easily as you shoot stills\\n- Easily connect and share your images with the world\\n\\n<b>Take your pictures to the next level with EOS 750D</b>\\n<b>Range of shooting modes</b>\\nEffortlessly capture stunning images using the latest DSLR technology with Basic and Creative modes, which allow you to take as much or as little control as you like.\\n\\n<b>Moveable screen for creative framing</b>\\nExplore creative shooting angles and enjoy simple and intuitive access to controls using the 3.0\"\" (7.7cm) Vari Angle LCD touch screen\\n\\n<b>Intelligent Viewfinder</b>\\nEOS 750D features an Intelligent Viewfinder which gives a much enhanced shooting experience. As you look through the viewfinder you can more easily see the focus point and any active AF areas, also the shooting information is clearly displayed.\\n\\n<b>Effortlessly capture stunning detail in any situation</b>\\nCapture vivid, detailed, high-resolution images with better dynamic range, lower noise and excellent control over depth of field thanks to a 24.2 Megapixel APS-C sensor.\\n\\n<b>19 all cross-type AF points for accurate subject tracking</b>\\nKeep track of fast moving action thanks to a fast and accurate autofocus system comprising 19 cross-type AF points.\\n\\n<b>Fast processor for action</b>\\nA powerful DIGIC 6 processor delivers full resolution shooting at 5 fps � so you�ll never miss that decisive moment.\\n\\n<b>Great low light shots</b>\\nTake memorable low light pictures without using flash thanks to a large ISO sensitivity range of ISO 100-12800 (extendable to ISO 25600)\\n\\n<b>Record cinematic Full HD movies as easily as you shoot stills</b>\\nShoot superbly detailed Full HD movies with a cinematic feel thanks to DSLR control over depth of field. Record your movies in MP4 format for quicker online sharing and easier transfer to other devices.\\n\\n<b>Smoother results</b>\\nEasily shoot cinematic Full HD movies with Hybrid CMOS AF III to track movement and focus smoothly between subjects.\\n\\n<b>Empower your creativity with easy shooting modes</b>\\nLet the camera do the work for you and capture creative photos with ease using a range of Scene Modes\\n\\n<b>Creative movie modes</b>\\nExpand the range of shooting possibilities in movies with features like Miniature Effect in movie.\"", 
     "shortDescription": "\"22.3 x 14.9mm CMOS, 24.2 megapixels, 3:2, DIGIC 6, LCD, ISO 12800, Full HD Movie, USB, HDMI mini, SD/SDHC/SDXC, Black\"", 
     "summary": "\"Canon 750D + EF-S 18-55mm, EOS. Megapixel: 24.2 MP, Camera type: SLR Camera Kit, Sensor type: CMOS. Focal length range (f-f): 18 - 55 mm, Minimum focal length (35mm film equiv): 2.9 cm, Maximum focal length (35mm film equiv): 8.8 cm. Focus: TTL-CT-SIR, Closest focusing distance: 0.25 m. ISO sensitivity: 100, 6400, 12800, Auto, Light exposure modes: Auto, Manual, Light exposure control: Program AE. Fastest camera shutter speed: 1/4000 s, Slowest camera shutter speed: 30 s, Camera shutter type: Electronic\"", 
     "shortSummary": "\"Canon EOS 750D + EF-S 18-55mm, ATW, Cloudy, Custom modes, Daylight, Flash, Fluorescent L, Shade, Tungsten, Food, Landscape, Sports, Movie, Single image, Slide show, Battery, SLR Camera Kit, TTL-CT-SIR\"" 
    }, 
    "category": null, 
    "preview": { 
     "id": 1, 
     "highRes": "http://images.icecat.biz/img/norm/high/26171112-1991.jpg", 
     "lowRes": "http://images.icecat.biz/img/norm/low/26171112-1991.jpg", 
     "manual": "" 
    } 
} 

Also, das ich Karte zu sortieren verwenden ein einfaches Array wie folgt zu erstellen:

// Create our mapped array 
var mapped = array.map(function (a, i) { 

    // Create our object 
    var obj = { 
     index: i, 
     name: a.details.title 
    }; 

    // Return our object 
    return obj; 
}); 

die dann

sortiert
mapped.sort(); 

Sobald es wurde sortiert Ich habe ein Array, das wie folgt aussieht:

var mapped = [{ 
    name: 'test1', 
    index: 4 
}, { 
    name: 'test2', 
    index: 0 
}, { 
    name: 'test3', 
    index: 3 
}, { 
    name: 'test4', 
    index: 2 
}, { 
    name: 'test5', 
    index: 1 
}]; 

So jetzt habe ich das sortierte abgebildete Array, das ich organisieren möchte die Produkte Array. Zeit (dies scheint zu sein, wo die Menschen sind verwirrt) Ich verwende:

// Get our result 
var result = mapped.map(function (item) { 
    return products[item.index]; 
}); 

Aber das schafft eine neue Array. Ich möchte kein neues Array, ich möchte (nicht sortieren) die bestehenden Produkte Array neu bestellen.

Hoffentlich erklärt das, was ich versuche zu erreichen.

+0

tun Sie 'javascript' Tag zu Ihrer Frage hinzufügen? – RomanPerekhrest

+0

heh, schon fertig – r3plica

+0

Karte war die Art und Weise, wie ich es getan habe. Ich ** habe ** ein neues Array erstellt und es zurückgegeben. was ich ** wollen ** zu tun, ist die bestehende ** Produkte ** Array behalten – r3plica

Antwort

0

Ich denke, die Antwort auf meine Frage ist:

// Loop through our mapped items 
mapped.forEach(function (mappedItem, i) { 

    // Get our item by the index 
    var item = array[mappedItem.index]; 

    // Update the index 
    item.index = i; 
}); 

// Sort our items 
array.sort(function (a, b) { 

    // Return our value 
    return a.index === b.index ? 0 : a.index < b.index ? -1 : 1; 
}); 
Verwandte Themen