将密钥添加到哈希

Add key to hash

本文关键字:哈希 添加 密钥      更新时间:2023-09-26

正如你从我的代码中看到的,我正在尝试向哈希page_rank添加一个键:

var page_rank = {};
function create_page_rank_row(step, url, page_rank){
	if(page_rank[step]){
	}else{
		page_rank[step] = { urls: {}};
	}
	page_rank[step].urls[url] = page_rank;
};
create_page_rank_row(0, "d01", 3);
create_page_rank_row(0, "d02", 4);
document.getElementById("result").innerHTML = JSON.stringify(page_rank);
<p id="result">
</p>

但它不起作用,我收到错误:

Cannot read property 'urls' of undefined

我做错了什么?我该如何解决这个问题?谢谢

你用一个也称为 page_rank 的参数来遮蔽初始page_rank变量。

当函数运行时,page_rank设置为一个数字。当我们内联您传递的参数的值时,请查看代码。

function create_page_rank_row(step, url, page_rank){
  if(3[step]){
  }else{
    3[step] = { urls: {}};
  }
  3[step].urls[url] = 3;
};

Javascript 不允许你在简单的基元值(如数字)上定义新属性。

也许将外部变量重命名为 page_ranks .

您将 page_rank 参数作为整数调用函数,并使用数组括号访问它。这将始终返回 undefined,即使您设置了它。

var x = 3;
console.log(x[0]); //undefined
x[0] = 'something';
console.log(x[0]); //still undefined
var page_rank = {};
function create_page_rank_row(step, url, rank) {
  if (!page_rank.hasOwnProperty(step)) {
    page_rank[step] = {
      urls: {}
    };
  }
  page_rank[step].urls[url] = rank;
};
create_page_rank_row(0, "d01", 3);
create_page_rank_row(0, "d02", 4);
console.log(JSON.stringify(page_rank));

函数内第三个参数的名称被更改,hasOwnProperty 被添加到函数中

更改

function create_page_rank_row(step, url, page_rank){

function create_page_rank_row(step, url, newrank){

page_rank[step].urls[url] = page_rank;

page_rank[step].urls[url] = newrank;