Проблемы с использованием eval () для анализа данных JSON [дубликат]

Попробуйте:

var funcs = [];

for (var i = 0; i < 3; i++) {
    funcs[i] = (function(index) {
        return function() {
            console.log("My value: " + index);
        };
    }(i));
}
for (var j = 0; j < 3; j++) {
    funcs[j]();
}

Изменить (2014):

Лично я думаю, что более поздний ответ @ Aust об использовании .bind - лучший способ сделать это сейчас. Также есть _.partial lo-dash / underscore, когда вам не нужно или хотите взаимодействовать с bind thisArg.

1
задан devwannabe 12 May 2016 в 16:24
поделиться

2 ответа

Для объекта obj и "repository.url" key вы можете получить глубокое значение с помощью

var val = key.split(".").reduce((o,k)=>o[k],obj);

Демонстрация:

var obj = {
  "name": "app",
  "version": "0.1.0",
  "description": "Sample description",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "some git url"
  },
  "keywords": [
    "node"
  ],
  "author": "Anonymous",
  "license": "ISC"
};

var key = "repository.url";

var val = key.split(".").reduce((o,k)=>o[k],obj);

document.write("result: \"" + val + "\"");

Теперь представьте, что вам нужно что-то, что не вызывает исключения, когда некоторые свойства отсутствуют, например "repository.language.version", тогда вы можете сделать

var val = key.split(".").reduce((o={},k)=>o[k],obj);
3
ответ дан Denys Séguret 23 August 2018 в 20:29
поделиться

Вы можете разбить ключ на . перед доступом к ним на объекте

var keys = argv[2].split('.');
var result = obj;
keys.forEach(function(key){
    result = result[key]
});
return result;
0
ответ дан TarunG 23 August 2018 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: