gpt4 book ai didi

JavaScript 数组查询

转载 作者:行者123 更新时间:2023-12-02 18:32:25 24 4
gpt4 key购买 nike

我正在尝试重写 d3.js 提供的示例。原始代码有这样的功能:

function interpolateValues(values, year) {
var i = bisect.left(values, year, 0, values.length - 1),
a = values[i];
if (i > 0) {
var b = values[i - 1],
t = (year - a[0]) / (b[0] - a[0]);
return a[1] * (1 - t) + b[1] * t;
}
return a[1];
}

其中“values”是一个数组,如下所示:

"income":[[1800,359.93],[1820,359.93],[1913,556.12],[1950,3363.02], etc.

但是,我们以不同的方式存储数据。与“名称”:[[年份,值]],...格式不同,我们的数据以不同的方式存储,很像数据库(示例数据如下):

{"region":"A","income":1178.0,"lifeExpectancy":788.0,"year":1800.0,"population":1292.0,"country":"Angola"},
{"region":"B","income":847.0,"lifeExpectancy":1183.0,"year":1800.0,"population":803.0,"country":"Benin"},
{"region":"A","income":798.0,"lifeExpectancy":765.0,"year":1801.0,"population":967.0,"country":"Angola"},
{"region":"B","income":1293.0,"lifeExpectancy":1497.0,"year":1801.0,"population":792.0,"country":"Benin"},

我希望用一个不同的函数替换 interpolateValues() 函数,如下所示:

SELECT income FROM dataset WHERE year = 1980

我知道这是 SQL,我只是用它来尝试理解这个想法。 基本上,您有一个包含数据的数组,一个包含年份的数组,我正在寻找一个返回特定年份数据的函数。

如果有插值功能就好了,但目前还不是太重要。问题是我刚刚学习使用 js,到目前为止我尝试过的任何方法都失败了。

感谢您的帮助!

编辑:需要澄清的一些额外信息:

我有这个功能,它可以工作:

function provideData(year) {
return nations.map(function(d) {
return {
name: d.country,
region: d.region,
income: d.income,
population: d.population,
lifeExpectancy: d.lifeExpectancy
};
});
}

但是,正如您所期望的,它返回完整的数组,从而输出一百多年的数据。现在如果 d.year == Year 的话,如果有一种方法可以返回 d.venue 就好了..

最佳答案

如果您不想使用下划线,这应该可以通过 for 循环来实现。

var plotData = []

for(var i = 0; i < data.length; i++){
if(data[i].year == targetYear){
plotData.push(data[i]);
}
}

我相信下划线也使用循环,因此效率损失不大。如果您知道一旦您的年份超过目标年份,通过中断 for 循环来对数据进行排序,则可以提高 for 循环的效率,如下所示:

function getData(data){

var plotData = []

for(var i = 0; i < data.length; i++){
if(data[i].year == targetYear){
plotData.push(data[i]);
} else if(data[i].year > targetYear){
return 0;
}
}

return 0;
}

要使用插值,您可以在 for 循环内构建一个与预期数组匹配的数组,或者调用 a.yeara.value 而不是 a[0]a[1]

关于JavaScript 数组查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17672281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com