gpt4 book ai didi

javascript - 从一个简单的一维数组中选择一组元素,目标元素在中间

转载 作者:行者123 更新时间:2023-11-29 14:58:04 25 4
gpt4 key购买 nike

由于我的大脑中缺乏数学神经元,我在寻找解决方法时遇到了一些困难。

我需要创建一个简单的 javascript 函数,它将接收三个参数:

  • 具有 X 元素的一维、普通索引数组(值是唯一 ID)
  • 要选择的目标 ID
  • 要返回的元素数量

第三个参数将要求函数返回一组元素,具有目标 ID 的元素位于结果的中心或旁边。

函数的结果也应该是一个数组。

一些例子使它的解释更直观:

function([100,120,140,160,180,200], 120, 3)
// should return [100,120,140]

function([100,120,140,160,180,200], 160, 4)
// should return [140,160,180,200]

function([100,120,140,160,180,200], 180, 5)
// should return [140,160,180,200,100]

最后一个示例所涵盖的案例让我在编写代码时感到困惑,我目前正在尝试这样做,但我发现自己编写了奇怪的条件、大量的 if 语句和代码,这些代码通常看起来像是一种变通方法。此外,参数 3 大于参数 1 中的元素数量的情况对我来说有点过分了。

我觉得继续使用这段代码不安全,因为它感觉有问题而且根本不合适。当然,具有适当数学技能的人可以为我提供我需要的理论,以了解如何以更优雅的方式完成此任务。

理论或伪代码就足够了,但如果有人手头有这样的东西,请不要犹豫分享。

谢谢!

(这是我到目前为止所写的——基于原型(prototype) JS 类实现)

var CBasicMatrix=Class.create({

initialize: function(elementList){
this.elementList=elementList;
},

select: function(id, amount){
if(amount>this.elementList.length)
amount=this.elementList.length;
if(!this.elementList.length) return false;
var elementIndex=this.elementList.indexOf(id);
if(elementIndex==-1) return false;
var isRound=amount%2==0;
var amountHalf=isRound ? (amount/2) : (Math.ceil(amount/2)-1);
// [464,460,462,461,463]
var result=[];
if(elementIndex-amountHalf >= 0) {
var startIndex=(elementIndex-amountHalf);
for(i=startIndex;i<=startIndex+amount;i++){
result.push(this.elementList[i];
}
} else {
// more seemingly stupid iterative code coming here
}

}

});

编辑:为了使这更容易理解,我将说明目的。此代码应该用于某种幻灯片放映,其中多个元素(参数 3)同时可见。参数 1 是按照它们在 HTML 声明中出现的正确顺序排列的所有元素(的 ID)的列表。参数 2 是当前选中的元素,因此应该出现在中间。

最佳答案

这是我的解决方案:

function method(arr, value, n) {
var result = [],
len = arr.length,
index = arr.indexOf(value);

for (var i = 0; index > -1 && i < n ; i++) {
result.push(arr[(len + index - ~~(n / 2) + (n % 2 ^ 1) + i) % len]);
}

return result;
}

测试:

var arr = [100, 120, 140, 160, 180, 200];

method(arr, 120, 3); // [100, 120, 140]
method(arr, 160, 4); // [140, 160, 180, 200]
method(arr, 180, 5); // [140, 160, 180, 200, 100]
method(arr, 100, 3); // [200, 100, 120]

关于javascript - 从一个简单的一维数组中选择一组元素,目标元素在中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14570609/

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