gpt4 book ai didi

javascript - 如何比较数组中的每个数字? (javascript)

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:13:03 24 4
gpt4 key购买 nike

我有一组数字,如下所示;

var data = "615:415,600:400,600:400,300:300"

每个数字代表一个 x/y 坐标,我想在每个数字旁边添加一个值,该值是根据某个范围内数字的频率计算的。

因此,我希望能够将此字符串中的每个值与所有其他值进行比较,并据此执行以下功能;

  1. 如果重复,则从字符串中删除数字,并添加:1
  2. 如果 x/y 数字相对于任何其他数字都在 15 的范围内,则添加:1
  3. 如果没有匹配,添加:0
  4. 转成数组

因此使用数据字符串,它将被转换为;

var data = "615:415:1, 600:400:2, 300:300:0"

我一直在尝试使用 reducer 函数来做到这一点,但我主要在第 2 步中挣扎。我希望有人能帮忙吗?

谢谢 - 下面的代码 + Plunk!


http://plnkr.co/edit/zPW1844cLnUFAlEI77jq?p=preview

var result = [];
var data = "615:415,600:400,600:400,300:300"
var count = 0;

var reducer = function(p, c, i, a) {

if (p && p !== c) {

var _t = p.split(":");
result.push({
x: _t[0],
y: _t[1],
value: count
});

count = 0;
if (i === a.length - 1) {
_t = c.split(":");
result.push({
x: _t[0],
y: _t[1],
value: count
});
}
}
else {
count++;
}
return c
}

data.split(',').sort().reduce(reducer);

console.log(result)

最佳答案

您可以使用循序渐进的方法,首先在坐标中拆分字符串,为具有计数的坐标生成哈希表并仅过滤唯一坐标。

然后将每个唯一坐标相互比较并计算是否在给定范围内。

稍后将坐标与计数映射并连接到字符串。

var data = "615:415,600:400,600:400,300:300",
result = function (array) {
var i, j,
hash = Object.create(null),
unique = array.split(',').filter(function (a) {
var parts = a.split(':');
if (!hash[a]) {
hash[a] = [parts[0], parts[1], 0]; // [x, y, count]
return true;
}
hash[a][2]++;
});

for (i = 0; i < unique.length - 1; i++) {
for (j = i + 1; j < unique.length; j++) {
if (
Math.abs(hash[unique[i]][0] - hash[unique[j]][0]) <= 15 &&
Math.abs(hash[unique[i]][1] - hash[unique[j]][1]) <= 15
) {
hash[unique[i]][2]++;
hash[unique[j]][2]++;
}
}
}
return unique.map(function (a) {
return hash[a].join(':');
}).join(', ');
}(data);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何比较数组中的每个数字? (javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41013225/

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