2016-04-28 86 views
0

看來人們對我想達到的目標感到困惑,所以我會更好地解釋這一點。 我有一個原始的產品陣列。單品看起來是這樣的:使用map更改數組的順序

{ 
    "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": "" 
    } 
} 

因此,排序這些我用地圖來創建一個簡單的數組是這樣的:

// 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; 
}); 

,然後進行排序

mapped.sort(); 

一旦已排序我有一個陣列,看起來像這樣:

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

所以現在我有排序的映射數組我想重新組織產品陣列。 目前(這似乎是人們感到困惑)我使用:

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

但是,創建一個新的陣列。我不想要一個新陣列,我想重新排序(不排序)現有的產品陣列。

希望這可以解釋我正在努力實現的目標。

+0

你想javascript'標籤添加'來你的問題? – RomanPerekhrest

+0

heh,已經完成 – r3plica

+0

地圖是我**的方式**做到這一點。我**是**創建一個新的數組並返回它。我希望**做什麼,是保留現有的**產品**陣列 – r3plica

回答

0

我想回答我的問題是這樣的:

// 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; 
});