javascript - 如何将两个数组缩减为存在于同一索引处的单个值?

标签 javascript arrays d3.js

我有一个 D3 程序正在构建一个折线图,其中有两条线,我想确定两条线交叉处的坐标。 D3 有这个功能吗?这些数组通常具有不同的长度并且是动态生成的,但总是有一个值,在同一索引处两者都相等。

例如

   var line1 = [0,1,2,3,4];
   var line2 = [4,3,2,1,0];

在本例中,答案 = 索引 2。如果没有 D3 函数,那么使用 ES6 及更高版本的最佳方法是什么?

最佳答案

D3 有一个非常未知的方法,名为 d3.zip ,我们可以使用它来合并数组并查找所有元素都相等的任何内部数组:

var line1 = [0, 1, 2, 3, 4];
var line2 = [4, 3, 2, 1, 0];
var zip = d3.zip(line1, line2).reduce(function(a, c, i) {
  if (c[0] === c[1]) a.push(i);
  return a;
}, []);

console.log(zip)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

d3.zip 的好处在于它可以与多个数组一起使用,并且还能保持较短数组的长度。因此,在更复杂的情况下(索引 6 和 9 中的值相等):

var line1 = [0, 1, 2, 3, 9, 9, 1, 4, 7, 6, 5, 4];
var line2 = [4, 3, 2, 1, 0, 8, 1, 2, 3, 6, 1];
var line3 = [9, 9, 9, 9, 4, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1];
var zip = d3.zip(line1, line2, line3).reduce(function(a, c, i) {
  const every = c.every(function(e) {
    return e === c[0]
  })
  if (every) a.push(i);
  return a;
}, []);

console.log(zip)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

关于javascript - 如何将两个数组缩减为存在于同一索引处的单个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55704277/

相关文章:

php - 将数组键及其值拆分为新变量

arrays - 如何检索未包含在谷歌表格中另一列中的列中的值

javascript - Crossfilter (d3js/dcjs) 获取组内组大小

php - 将 css 应用于数组中的特定元素

d3.js - 如何为 Vue.js 实现 D3

javascript - 使用大型数据集时,D3 强制布局可视化非常慢?

javascript - 使用 $(this)。 (".className") 访问类的特定实例

javascript - Joi 中的 array.items() 内的 object.pattern() 无法正常工作

javascript - 在文件夹中运行所有浏览器化的 Mocha 测试

javascript - HTML 标记中的下载属性不适用于 BLOB 文件