2017-01-26 22 views
1

一個陣列我有2個陣列xDatesyMentions創建從2個陣列連鍵X和Y

xDates

[1453766400000, 1453852800000, 1453939200000... 

yMentions

[5160, 5240, 7090... 

目標就像是一個數組所以:

[ 
    { 
     x: 1453766400000, 
     y: 5160 
    }, 
    ... 
] 

試圖用Ramda Zip認爲zipObj會是什麼,我需要,但下面只產生1個對象:

R.zipObj(['x', 'x', 'x'], [1, 2, 3]); =>{"x": 3}

想通了,也許我在x,然後在y運行R.zipObj數組,然後壓縮在一起然後設置爲數組下面mentionsPointsArray

const createMentionPoints = (frequencyPoints, termsData) => { 
    const yMentions = termsData.mentions; 
    const propX = R.prop('x'); 
    const xPointsFromFrequency = R.map(propX, frequencyPoints); 
    console.log('xDates', xPointsFromFrequency) 
    console.log('yMentions', yMentions) 
    const mentionsPointsArray = [] 
    return frequencyPoints; 
}; 

回答

2

您應該使用Array#map功能。

map()方法創建一個新數組,其結果是在此array中的每個元素上調用一個提供的函數。提供的函數是callback

結果數組中的元素是對象,如下所示:{"x":item, "y":yMentions[i]}

var xDates=[1453766400000, 1453852800000, 1453939200000]; 
 
var yMentions=[5160, 5240, 7090]; 
 
console.log(xDates.map(function(elem,i){ 
 
    return {"x":elem,"y":yMentions[i]} 
 
}));

+1

謝謝!剛剛計算出了Ramda解決方案。在我們的應用中大量使用Ramda,因爲它使事情變得更加簡單,將選擇這個併發布我剛發現的關於zipWith的內容。 –

2

The ramda solutionhttp://ramdajs.com/docs/#zipWith

var createPoints = (x, y) => { 
    return { x: x, y: y } 
}; 

R.zipWith(createPoints, [1, 2, 3], ['a', 'b', 'c']); 

// returns: [{"x": 1, "y": "a"}, {"x": 2, "y": "b"}, {"x": 3, "y": "c"}] 
+0

很好的解決方案。 +1。 –

+0

不錯。這可能太晦澀了,但請注意'createPoint'可以寫成'createPoints = R.unapply(R.zipObj(['x','y']))''。 –

1

我認爲最乾淨的無點的版本是:

const data1 = ['a', 'b', 'c'] 
const data2 = [1, 2, 3] 

R.zipWith(R.objOf, data1, data2) 

請看看工作REPL here