#javascript #arrays #object
#javascript #массивы #объект
Вопрос:
Я создаю объект, который включает в себя 3 объекта, один из которых включает в себя три объекта, и я хочу, чтобы каждый из них установил значение.
И я не знаю, нужно ли разделять тип объекта, кажется, все они являются объектами.
Я пытаюсь сделать так: пройти первый раз, чтобы распознать объект и массив, затем пройти дважды и в третий раз в depart, но консоль показывает ошибку.
> Невозможно установить свойство ‘www.google.com ‘
неопределенного типа ошибка: не удается установить свойство ‘www.google.com ‘ из неопределенных
при вычислении (userscript.html?name=
в Array.forEach ()
Исходный сценарий исключает четыре уровня вложенности объекта в инструмент поиска браузера
Object.keys(iconsData).forEach(function(value1) {
if(iconsData[value1].constructor === Array){
iconsData[value1].forEach(function (value2) {
console.log('typeArray--' iconsData[value1].constructor)
value2.host.forEach(function(host) {
iconsData.hostCustomMap[host] = value2.custom // The console shows an Error maybe here
})
})
} else if (iconsData[value1].constructor === Object) {
Object.keys(iconsData[value1]).forEach(function (value2) {
console.log('typeObject--' iconsData[value1].constructor)
iconsData[value1][value2].forEach(function (value3) {
value3.host.forEach(function(host){
iconsData.hostCustomMap[host] = value3.custom
});
});
});
}
})
Следующий код включает вложенный объект.
(function () {
'use strict';
var keyword = {
beforePopup: function (popup) {
var text = window.getSelection().toString().trim();
GM_setValue('search', text);
popup(text);
},
beforeCustom: function (custom) {
var text = GM_getValue('search');
GM_setValue('search', '');
custom(text);
},
};
var iconsData = {
iconArraya: {
Arraya: [
{
name: 'Google',
image:'https://i.ibb.co/R9HMTyR/1-5.png',
host: ['www.google.com'],
popup: function (text) {
open('https://search.google.com/live?keyword=' encodeURIComponent(text));
}
}
],
Arrayb: [
{
name: 'Bing',
image: 'https://i.ibb.co/pwkLTFc/1.png',
host: ['www.bing.com'],
popup: function (text) {
open('https://www.bing.com/live?keyword=' encodeURIComponent(text)');
}
}
],
Arrayc: [
{
name: 'Youtube',
image:'https://i.ibb.co/FWVJ3Kf/1-2.png',
host: ['www.youtube.com'],
popup: function (text) {
open('https://www.youtube.com/live?keyword=' encodeURIComponent(text)');
}
}
]
},
iconArrayb: [
{
name: 'open',
image:'https://i.ibb.co/fxpm6Wc/image.png',
host: [''],
popup: function (text) {
open(encodeURIComponent(text));
}
}
],
iconArrayc: [
{
name: 'copy',
image:'https://i.ibb.co/PQ5xM2R/2-1.png',
host: [''],
popup: function (text) {
document.execCommand('copy', false, null))
}
}
],
hostCustomMap: {}
}
Ответ №1:
Невозможно установить свойство ‘www.google.com ‘ неопределенного типа ошибка: не удается установить свойство ‘www.google.com ‘ из неопределенных
Выдается ошибка, потому что hostCustomMap не является свойством iconsData .
В вашем коде вы устанавливаете переменную с именем hostcustommapв конце, это должно быть свойство объекта iconsData . Как в оригинальном скрипте.
Вот так:
var iconsData = {
iconArraya: ...,
iconArrayb: ...,
iconArrayc: ...,
iconArrayD: ...,
hostCustomMap: {}
}
Не это:
var iconsData = {
iconArraya: ...,
iconArrayb: ...,
iconArrayc: ...,
iconArrayD: ...
}
var hostCustomMap = {}
Комментарии:
1. Да, я ошибаюсь, вывод hostCustomMap из объекта может уменьшить некоторые проблемы, он должен быть введен.