按首字母顺序按字母顺序对对象进行排序和分组

时间:2018-06-24 10:38:05

标签: javascript arrays reactjs sorting collections

我试图创建一个这样的集合以便在react组件中使用:

let data = [
    { 
        group : 'A', 
        children : [
            { name : 'Animals', id : 22 },
            ...
        ]
    },
    { 
        group : 'B', children : [
            { name : 'Batteries', id : 7},
            { name : 'Baggage', id : 12 },
            ...
        ]
    },
    { 
        group : 'C', children : [
            { name : 'Cake', id : 7},
            ...
        ]
    },
]

我已经对数据进行了这样的排序:

let rawData = [
    { name : 'Animals', id : 10},
    { name : 'Batteries', id : 7},
    { name : 'Baggage', id : 12 },
    { name : 'Cake', id : 7},
    ...
]

我也使用了这个sorting method,但是问题是,它返回一个带有ABC键的对象,并以子代作为值。但是我必须像上面那样将其转换为数组才能使用。

这是我到目前为止所尝试的:

let data = rawData.reduce(function(prevVal, newVal){   
    char = newVal.name[0].toUpperCase();
    return { group: char, children :{name : newVal.name, id : newVal.id}};
},[])

1 个答案:

答案 0 :(得分:9)

您可以使用from math import hypot, pi, cos, sin from PIL import Image import numpy as np import cv2 as cv import math def hough(img): img = im.load() w, h = im.size thetaAxisSize = w #Width of the hough space image rAxisSize = h #Height of the hough space image rAxisSize= int(rAxisSize/2)*2 #we make sure that this number is even houghed_img = Image.new("L", (thetaAxisSize, rAxisSize), 0) #legt Bildgroesse fest pixel_houghed_img = houghed_img.load() max_radius = hypot(w, h) d_theta = pi / thetaAxisSize d_rho = max_radius / (rAxisSize/2) #Accumulator for x in range(0, w): for y in range(0, h): treshold = 0 col = img[x, y] if col <= treshold: #determines for each pixel at (x,y) if there is enough evidence of a straight line at that pixel. for vx in range(0, thetaAxisSize): theta = d_theta * vx #angle between the x axis and the line connecting the origin with that closest point. rho = x*cos(theta) + y*sin(theta) #distance from the origin to the closest point on the straight line vy = rAxisSize/2 + int(rho/d_rho+0.5) #Berechne Y-Werte im hough space image pixel_houghed_img[vx, vy] += 1 #voting return houghed_img, rAxisSize, d_rho, d_theta def find_maxima(houghed_img, rAxisSize, d_rho, d_theta): w, h = houghed_img.size pixel_houghed_img = houghed_img.load() maxNumbers = 9 ignoreRadius = 10 maxima = [0] * maxNumbers rhos = [0] * maxNumbers thetas = [0] * maxNumbers for u in range(0, maxNumbers): print('u:', u) value = 0 xposition = 0 yposition = 0 #find maxima in the image for x in range(0, w): for y in range(0, h): if(pixel_houghed_img[x,y] > value): value = pixel_houghed_img[x, y] xposition = x yposition = y #Save Maxima, rhos and thetas maxima[u] = value rhos[u] = (yposition - rAxisSize/2) * d_rho thetas[u] = xposition * d_theta pixel_houghed_img[xposition, yposition] = 0 #Delete the values around the found maxima radius = ignoreRadius for vx2 in range (-radius, radius): #checks the values around the center for vy2 in range (-radius, radius): #checks the values around the center x2 = xposition + vx2 #sets the spectated position on the shifted value y2 = yposition + vy2 if not(x2 < 0 or x2 >= w): if not(y2 < 0 or y2 >= h): pixel_houghed_img[x2, y2] = 0 print(pixel_houghed_img[x2, y2]) print('max', maxima) print('rho', rhos) print('theta', thetas) return maxima, rhos, thetas im = Image.open("img5.pgm").convert("L") houghed_img, rAxisSize, d_rho, d_theta = hough(im) houghed_img.save("houghspace.bmp") houghed_img.show() img_copy = np.ones(im.size) maxima, rhos, thetas = find_maxima(houghed_img, rAxisSize, d_rho, d_theta) for t in range(0, len(maxima)): a = math.cos(thetas[t]) b = math.sin(thetas[t]) x = a * rhos[t] y = b * rhos[t] pt1 = (int(x + 1000*(-b)), int(y + 1000*(a))) pt2 = (int(x - 1000*(-b)), int(y - 1000*(a))) cv.line(img_copy, pt1, pt2, (0,0,255), 3, cv.LINE_AA) cv.imshow('lines', img_copy) cv.waitKey(0) cv.destroyAllWindows() 创建对象,然后在该对象上使用reduce

Object.values