Разделение CSV на объект с помощью javascript / jquery - PullRequest
2 голосов
/ 13 февраля 2012

У меня есть упорядоченный массив, который выглядит так: -

[-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50]

Я хотел бы сделать следующее:

  • Возьмите каждую «нечетную» запись и сделайте ее «индексом ключа в объекте», чего можно добиться путем округления значения и умножения на 10, например. (Math.round (-0.0020057306590257895 * 10) должен иметь индекс 0, а Math.round (0.09598853868194843 * 10) должен быть индекс 1 и т. Д.)
  • Возьмите четные значения и присвойте им соответствующие значения в объекте.

Итак ...

Приведенный выше CSV-файл должен возвращать следующий объект: -

{
  0: 50,
  1: 50,
  2: 49.99999999999999,
  3: 50
}

Кто-нибудь знает, как я могу проанализировать этот CSV для получения необходимого массива, используя jQuery или простой javascript?

Ответы [ 3 ]

4 голосов
/ 13 февраля 2012

Я собираюсь предположить, что вы что-то сделали для чтения файла CSV в строку, поскольку вы сказали в комментариях, которые пытались использовать .split(",").

var csv = "-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50";
var arr = csv.split(",");
var obj = {};
for (var i = 0; i < arr.length - 1; i += 2) {
    obj[Math.round(arr[i] * 10)] = arr[i + 1];
}

Вы, вероятно, должны сначала проверить, что в массиве есть четное количество элементов, например, if (arr.length % 2 == 0).

Вещи, с которыми вы должны уйти:

  1. {} фигурные скобки используются для определения объекта, пара пустых скобок означает то же самое, что и new Object(), но рекомендуется использовать фигурные скобки.
  2. [] квадратные скобки могут использоваться для определения массива или адреса как элементов массива по их индексу (например, arr[0]), так и свойств объекта по их ключу (например, obj['name']).
1 голос
/ 13 февраля 2012

Если ваша структура данных гарантированно будет иметь значение для каждого целого числа (т. Е. Не будет переходить, скажем, с 3,9 до 5,9 в четных столбцах), вы можете сэкономить немного усилий и использовать

var arr = "-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50".split(",");
var result = [];

for (index = 0; index < arr.length - 1; index += 2) {
    result.push(parseFloat(arr[index + 1]));
}

NB - здесь также есть числа, а не строки в качестве значений из-за использования parseFloat

1 голос
/ 13 февраля 2012
var arr = "-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50".split(",");
var obj = {};

for (index = 0; index < arr.length - 1; index += 2) {
    var key = Math.round(parseFloat(arr[index]) * 10);
    var value = Math.round(parseFloat(arr[index + 1]) * 10);
    obj[key.toString()] = value.toString();
}

Чтобы получить значение:

var keyVal = obj[key];

Чтобы удалить пару ключ-значение:

delete obj[key];

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...