Вот комплексный метод clone (), который может клонировать любой объект JavaScript. Он обрабатывает почти все случаи:
function clone(src, deep) {
var toString = Object.prototype.toString;
if (!src && typeof src != "object") {
// Any non-object (Boolean, String, Number), null, undefined, NaN
return src;
}
// Honor native/custom clone methods
if (src.clone && toString.call(src.clone) == "[object Function]") {
return src.clone(deep);
}
// DOM elements
if (src.nodeType && toString.call(src.cloneNode) == "[object Function]") {
return src.cloneNode(deep);
}
// Date
if (toString.call(src) == "[object Date]") {
return new Date(src.getTime());
}
// RegExp
if (toString.call(src) == "[object RegExp]") {
return new RegExp(src);
}
// Function
if (toString.call(src) == "[object Function]") {
//Wrap in another method to make sure == is not true;
//Note: Huge performance issue due to closures, comment this :)
return (function(){
src.apply(this, arguments);
});
}
var ret, index;
//Array
if (toString.call(src) == "[object Array]") {
//[].slice(0) would soft clone
ret = src.slice();
if (deep) {
index = ret.length;
while (index--) {
ret[index] = clone(ret[index], true);
}
}
}
//Object
else {
ret = src.constructor ? new src.constructor() : {};
for (var prop in src) {
ret[prop] = deep
? clone(src[prop], true)
: src[prop];
}
}
return ret;
};
Я надеюсь, что ваши данные распределены неравномерно - круговые диаграммы с 200 срезами могут быть отвратительными!
Если я правильно понимаю вашу цель, вам на самом деле не нужен график из этих 500 чисел, вы хочу график того, как часто каждое значение появляется в этом наборе. Создайте отчет о том, что данные в парах, и составьте диаграмму.
Например, в ячейке с 200 пустыми ячейками под ней, скажем, A30 или V1, введите:
=ARRAYFORMULA(ROW(1:200))
Это возможные значения от 1 до 200.
Затем рядом с ним, скажем, B30 или W1, введите:
=ARRAYFORMULA(COUNTIF($A$1:$T$25, "="&ROW(1:200)))
Это отдельные подсчеты того, как часто каждый номер столбца A появляется в A1: T25. [1110 ]
Теперь, когда ваши ценности и их «популярность» просчитаны, создайте свою круговую диаграмму из этого.
=QUERY(QUERY(ARRAYFORMULA(TRANSPOSE(SPLIT(JOIN(" ",
QUERY(A1:T25, , 10000)), " "))),
"select Col1,count(Col1) group by Col1 label count(Col1)''"),
"order by Col2 desc")