2016-03-07 59 views
0

我有一个300个元素的数组。这是波形条。 300条等于300px。线性阵列(json)的resample算法

[28,26,22,20,28,22,20,24,24,25,23,28,20,29,29,31,31,25,23,18,22,26,27,28,23,26,19,22,24,27,24,27,25,25,22,34,34,31,32,37,37,33,34,35,29,33,32,30,32,34,39,34,32,32,32,33,34,37,38,36,36,36,35,36,32,36,34,36,35,35,33,36,34,34,37,35,33,34,33,31,35,35,33,34,36,36,34,33,35,33,35,36,35,34,30,30,31,34,37,35,36,33,25,31,34,30,25,40,33,25,31,30,26,41,34,28,33,30,24,20,28,27,18,32,27,30,39,35,31,33,29,32,31,31,34,31,42,34,28,35,35,38,38,33,27,38,38,37,43,32,38,38,35,36,41,34,30,21,21,22,21,21,21,21,21,21,21,21,20,21,21,20,21,21,21,22,22,20,21,21,21,21,21,21,21,29,37,39,39,30,38,29,29,35,40,33,41,41,33,36,35,28,30,36,32,32,31,35,30,32,29,29,30,31,32,33,34,33,32,29,30,31,29,27,28,29,28,28,30,28,28,22,28,29,25,24,25,30,32,30,30,28,28,25,28,27,24,23,25,32,30,32,28,26,28,30,28,30,28,29,26,29,29,26,32,29,26,26,30,27,27,24,27,28,33,38,35,24,35,27,21,23,23,28,20,23,28,21,24,18,22,22,23,22,19,27,16,18,37,59,59] 

我想降低均匀50100250个元素,让〜250像素,100像素〜50像素〜

我找阵列像近邻重采样算法,但我不知道该怎么线性阵列

上应用它

示例:http://codepen.io/Alexufo/pen/MyKpXO

+1

有什么问题比? –

+1

我认为resampling将是在这里寻找关键字。 – Caramiriel

+0

@ n01ze我正在寻找像最近邻居阵列的重采样算法,但我不知道如何将它应用于线性阵列 – Alexufo

回答

1

您可以使用.filter轻松删除阵列中的第6个元素。

myArray = myArray.filter((e,i) => i%6) 

编辑:对于一个更一般的情况下

function reduceArray(array, newLength) { 
    if(newLength >= array.length) { 
    return array.slice(); 
    } 
    var factor = array.length/(array.length - newLength) 
    return array.filter((e,i) => Math.floor(i % factor)); 
} 

极品回合,因为因素可能不是一个整数。 if语句存在,因为它总是会删除至少一个元素。我正在使用切片,因此我不会返回对原始数组的引用,而是返回一个新副本。

+0

谢谢。但是,如果我需要均匀减少50%以上的宽度,我们可以做什么? – Alexufo

0

您可以尝试Array.map

var data = [28,26,22,20,28,22,20,24,24,25,23,28,20,29,29,31,31,25,23,18,22,26,27,28,23,26,19,22,24,27,24,27,25,25,22,34,34,31,32,37,37,33,34,35,29,33,32,30,32,34,39,34,32,32,32,33,34,37,38,36,36,36,35,36,32,36,34,36,35,35,33,36,34,34,37,35,33,34,33,31,35,35,33,34,36,36,34,33,35,33,35,36,35,34,30,30,31,34,37,35,36,33,25,31,34,30,25,40,33,25,31,30,26,41,34,28,33,30,24,20,28,27,18,32,27,30,39,35,31,33,29,32,31,31,34,31,42,34,28,35,35,38,38,33,27,38,38,37,43,32,38,38,35,36,41,34,30,21,21,22,21,21,21,21,21,21,21,21,20,21,21,20,21,21,21,22,22,20,21,21,21,21,21,21,21,29,37,39,39,30,38,29,29,35,40,33,41,41,33,36,35,28,30,36,32,32,31,35,30,32,29,29,30,31,32,33,34,33,32,29,30,31,29,27,28,29,28,28,30,28,28,22,28,29,25,24,25,30,32,30,30,28,28,25,28,27,24,23,25,32,30,32,28,26,28,30,28,30,28,29,26,29,29,26,32,29,26,26,30,27,27,24,27,28,33,38,35,24,35,27,21,23,23,28,20,23,28,21,24,18,22,22,23,22,19,27,16,18,37,59,59] 
 

 
var baseValue=300; 
 

 
function reduceValues(arr, val){ 
 
    return data.map(function(item){ 
 
    return Math.ceil(item * val/baseValue); 
 
    }); 
 
} 
 

 
function print(o){ 
 
    document.getElementById("result").innerHTML = "<pre>" + JSON.stringify(o,0,4) + "</pre>"; 
 
} 
 

 
function getNewList(val){ 
 
    print(reduceValues(data.slice(), val)); 
 
}
<button onclick="getNewList(50)">50</button> 
 
<button onclick="getNewList(100)">100</button> 
 
<button onclick="getNewList(150)">150</button> 
 
<button onclick="getNewList(200)">200</button> 
 
<button onclick="getNewList(250)">250</button> 
 
<button onclick="getNewList(300)">300</button> 
 

 
<p id="result"></p>

+0

谢谢,但在你的例子数字更改值 – Alexufo

+0

@Alexufo没有得到你。根据我的理解,父数组,'data'仍然具有原始值,并且您需要更新值数组。对? – Rajesh